分享十条实用的Swift小提示

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

Swift做出了一个兼顾:public private(set) 它可以让一个属性可被读取,但不能被写入。这样所有人都可以读取我们银行的地址,但只有银行才能改它。


struct Bank {
 public private(set) var address: String
}

7.成员逐一初始化(memberwise initializers)与自定初始化协同

Swift结构默认用成员逐一初始化,它可以方便快捷地创建实例


struct Score {
 var player: String
 var score: Int
}
 
let highScore = Score(player: "twostraws", score: 556)

但是如果你创建自己的初始化,你会自动失去成员逐一初始化。这是考虑到安全问题:你的初始化似乎是做了一些你觉得很重要的额外工作,所以如果Swift还用成员逐一初始化,那你的额外工作会被跳过。

如果你想要你的初始化与成员逐一初始化同时使用,步骤很简单。把你的初始化声明到一个扩展中,像这样:


struct Score {
 var player: String
 var score: Int
}
 
extension Score {
 init(player: String) {
  self.player = player
  score = 0
 }
}
 
// 现在它们都可用了
let highScore1 = Score(player: "twostraws", score: 0)
let highScore2 = Score(player: "twostraws")

8.static vs class属性

Swift中的类属性可以用2种关键词创建:static 和 class。它们都能让一个类中所有实例共享某个属性,但static意味着final,即无法在子类中被覆盖。

例如我们可以创建一个Building类,并定义一个用于存储建筑规划的class属性,和一个用于存储安全须知的static属性。