我在这个结构中遇到了这个问题,在"lazy var townSize:Size = {"的行上,无法弄清问题是什么.
struct Town {
let region = "South"
var population = 5422
var numberOfStoplights = 4
enum Size {
case Small
case Medium
case Large
}
lazy var townSize: Size = {
switch self.population {
case 0...10000:
return Size.Small
case 10001...100000:
return Size.Medium
default:
return Size.Large
}
}
func printTownDescription() {
print("Population: \(myTown.population), number of stoplights: \(myTown.numberOfStoplights)")
}
mutating func changePopulation(amount: Int) {
population += amount
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*r K 11
你错误地声明了lazy var它应该像这样声明
lazy var townSize: Size = {
switch self.population {
case 0...10000:
return Size.Small
case 10001...100000:
return Size.Medium
default:
return Size.Large
}
}()
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 11
如前所述,要使用闭包初始化存储的属性,您需要()
在该闭包之后:
lazy var townSize: Size = {
switch self.population {
case 0 ... 10000:
return .Small
case 10001 ... 100000:
return .Medium
default:
return .Large
}
}()
Run Code Online (Sandbox Code Playgroud)
但是,因为population
是变量而不是常量,所以根本不想townSize
成为存储属性.相反,您希望它是一个计算属性,以准确反映以下内容中的任何更改population
:
var townSize: Size {
switch population {
case 0 ... 10000:
return .Small
case 10001 ... 100000:
return .Medium
default:
return .Large
}
}
Run Code Online (Sandbox Code Playgroud)
注意缺乏=
.
如果您使用lazy
存储的属性,如果population
访问后更改townSize
,townSize
则不会相应地反映这一点.但是使用计算属性可以解决这个问题.
归档时间: |
|
查看次数: |
5633 次 |
最近记录: |