// 第一次ios阶段考察 预测试项目
// 考试内容
//1. 定义空气调控系统(AirSystem)协议
protocol AirSystem { //AirSystem 协议 表示建筑物的空气调控系统
func airMethod() -> String
}
//2. 定义窗子(Window)类
class Window :AirSystem {
var windowNum:Int //表示建筑窗子数量
init(windowNum :Int) {
self.windowNum = windowNum
}
func airMethod() -> String { //实现协议AirSystem 的airMethod 方法
return "通过窗子进行空气调节"
}
}
//3. 定义空调(AirConditioner)类
class AirCondition:AirSystem {
var workRate : Double
init(workRate:Double) {
self.workRate = workRate
}
func airMethod() -> String {
return "通过空调进行空气调节"
}
}
//4. 定义建筑类型(BuildStyle)枚举
enum BuildStyle {
case Normal
case Classical
case HiTeach
}
//5. 定义建筑物(Building)类
class Building {
var buildStyle: BuildStyle
var layerNum : Int //建筑层数
init(buildStyle:BuildStyle,layerNum:Int) {
self.buildStyle = buildStyle
self.layerNum = layerNum
}
func description() {
if self.buildStyle==BuildStyle.Normal {
print("这是具有\(layerNum)层的正常风格的建筑")
}
if self.buildStyle==BuildStyle.Classical {
print("这是具有\(layerNum)层的古典风格的建筑")
}
if self.buildStyle==BuildStyle.HiTeach {
print("这是具有\(layerNum)层的科技风格的建筑")
}
}
}
//6. 定义中国园林建筑(ChineseBuilding)类
class ChineseBuilding: Building {
var airSystem:AirSystem
var name:String? = nil
init( airSystem:AirSystem, name :String?,buildStyle:BuildStyle,layerNum:Int) {
self.airSystem = airSystem
self.name = name
super.init(buildStyle: buildStyle, layerNum: layerNum)
}
var height : Double{
return 3.5*Double(layerNum)
//只读计算属性
}
override func description() {
if (self.name != nil) {
print("中式风格的建筑\(name!),高度\(height)米,空气调节方式是:\(airSystem.airMethod())")
}else{
print("这是中式风格建筑,高度\(height)米,空气调节方式是:\(airSystem.airMethod())")
}
}
}
//7. 定义现代建筑(ModernBuilding)类
class ModleBuilding: Building {
var airSystem:AirSystem
var height :Double{
return 3.0*Double(layerNum)
}
init(airSystem:AirSystem,buildStyle:BuildStyle, layerNum:Int) {
self.airSystem = airSystem
super.init(buildStyle: buildStyle, layerNum: layerNum)
}
convenience init(isSkyscraper:Bool,airSystem:AirSystem){
if isSkyscraper {
self.init(airSystem: airSystem, buildStyle: BuildStyle.HiTeach, layerNum: 100)
}else{
self.init(airSystem: airSystem, buildStyle: BuildStyle.HiTeach, layerNum: 10)
}
}
func rebuild(rebuildmethod:(Int)-> Int) {
self.layerNum = rebuildmethod(layerNum)
}
}
//8. 执行以下逻辑功能:
var window = Window(windowNum: 100)
var AirConditioner = AirCondition(workRate: 98)
typealias CB = ChineseBuilding
typealias MB = ModleBuilding
var dicCBs = [String:CB]()
for i in 0...9{
dicCBs.updateValue(CB(airSystem: window, name: "中式建筑\(i)", buildStyle: BuildStyle.Classical, layerNum: 3), forKey:"中式建筑\(i)" )
}
for i in dicCBs{
i.value.description()
}
var mb1 = MB(airSystem: AirConditioner, buildStyle: BuildStyle.HiTeach, layerNum: 30)
var mb2 = MB(isSkyscraper: true, airSystem: AirCondition(workRate: 2000))
print("重建前的建筑高度:\(mb1.height)")
mb1.rebuild(rebuildmethod: {(A:Int)->Int in return A+10})//参数是一个(Int)->Int闭包
print("重建后的建筑高度:\(mb1.height)")
iOS
最新推荐文章于 2024-06-24 09:39:26 发布