前端之家收集整理的这篇文章主要介绍了
在所有存储的属性被初始化之前使用swift – ‘self’,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
301_0@
我正在通过一个
learn-swift playground,并
升级到Swift 2.0,当我学习语言.以下
代码(可能与以前版本的Swift一起使用)现在会
生成两个
错误:“在所有存储的
属性被初始化之前使用”“self”,在初始化之前使用“Constant”self.capitalCity“
class Country
{
let name: String
let capitalCity: City!
init(name: String,capitalName: String)
{
self.name = name
self.capitalCity = City(name: capitalName,country: self)
}
}
class City
{
let name: String
unowned let country: Country
init(name: String,country: Country)
{
self.name = name
self.country = country
}
}
看到一个answer to a similar question我看到我可以改变让都市:城市!到大都会城市:城市!并解决语法错误.
我意识到,在这个例子中,一个国家的首都可以改变,所以这样会很好,但如果有一个价值真的是一个常数的情况怎么办?
有没有办法解决语法错误,同时保持capitalCity是一个常数?
在这种情况下,我建议您使该
属性变为变量,但通过计算
属性隐藏它(使其看起来像一个常量):
class Country {
let name: String
private var _capitalCity: City!
var capitalCity: City {
return _capitalCity
}
init(name: String,capitalName: String) {
self.name = name
self._capitalCity = City(name: capitalName,country: self)
}
}