class Building {
class var zoningRestrictions: String {
return "None"
}
static var safetyRequirements: [String] {
return ["Fire escapes", "Sprinklers"]
}
}
因为zoningRestrictions是class属性,可以在子类中修改,比如居民区建住房,商业区建写字楼等等。相对的safetyRequirements是一个static属性,意味着所有房屋和子类必须符合安全法规。
代码如下:
class Skyscraper: Building {
// this is allowed
override class var zoningRestrictions: String {
return "Dense commercial only"
}
// but this is not
override static var safetyRequirements: [String] {
return ["Sprinklers"]
}
}
9. == 和 === 是不一样的
==运算符用于检测两个Equatable类型是否相等,例如
1 == 1
"kayak" == String("kayak".reversed())
[2, 4, 6] == [1, 2, 3].map { $0 * 2 }
通过对Equatable的自动综合分析,对==的支持就像对类型定义添加Equatable一样简单。但如果是对类,有另一个运算符:===。
因为类中的实例只不过是对内存特定地址的引用,===用于检查一个类中的2个实例是否指向同一段内存地址。
所以下面的情况会被认为是true
class Lightsaber {
var color = "Blue"
}
let saber1 = Lightsaber()
let saber2 = saber1
saber1 === saber2
===运算符完全不使用Equatable,这就是说如果你创建2个拥有相同属性的独立对象,===会返回false
let saber3 = Lightsaber()
saber1 === saber3
10.通过numericCast()在整型间转换








