分享十条实用的Swift小提示

2020-01-09 00:14:44刘景俊


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()在整型间转换