在所有存储的属性被初始化之前使用swift – ‘self’

我正在通过一个 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)
    }
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...