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属性。








