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

前端之家收集整理的这篇文章主要介绍了在所有存储的属性被初始化之前使用swift – ‘self’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在通过一个 learn-swift playground,并升级到Swift 2.0,当我学习语言.以下代码(可能与以前版本的Swift一起使用)现在会生成两个错误:“在所有存储的属性被初始化之前使用”“self”,在初始化之前使用“Constant”self.capitalCity“
  1. class Country
  2. {
  3. let name: String
  4. let capitalCity: City!
  5.  
  6. init(name: String,capitalName: String)
  7. {
  8. self.name = name
  9. self.capitalCity = City(name: capitalName,country: self)
  10. }
  11. }
  12.  
  13. class City
  14. {
  15. let name: String
  16. unowned let country: Country
  17.  
  18. init(name: String,country: Country)
  19. {
  20. self.name = name
  21. self.country = country
  22. }
  23. }

看到一个answer to a similar question我看到我可以改变让都市:城市!到大都会城市:城市!并解决语法错误.

我意识到,在这个例子中,一个国家的首都可以改变,所以这样会很好,但如果有一个价值真的是一个常数的情况怎么办?

有没有办法解决语法错误,同时保持capitalCity是一个常数?

在这种情况下,我建议您使该属性变为变量,但通过计算属性隐藏它(使其看起来像一个常量):
  1. class Country {
  2. let name: String
  3.  
  4. private var _capitalCity: City!
  5. var capitalCity: City {
  6. return _capitalCity
  7. }
  8.  
  9. init(name: String,capitalName: String) {
  10. self.name = name
  11. self._capitalCity = City(name: capitalName,country: self)
  12. }
  13. }

猜你在找的Swift相关文章