繁体   English   中英

如何将不可变的Swift属性初始化为计算值?

[英]How do I initialize an immutable Swift property to a computed value ?

当我有这个初始化器时:

let channels : [TVChannel]

required init?(json : NSObject)
{
    if let x = json as? [NSObject]
    {
        self.channels = x.map { TVChannel(json:$0)! }
    }
}

编译器给我错误:

错误:初始化之前使用的(12,14)常量'self.channels'

为什么是这样 ? 以及如何初始化我的TVChannel映射数组的TVChannel

当控制流未输入if let条件时,编译器需要知道如何初始化self.channels

一个解决方案可能是提供else分支:

if let x = json as? [NSObject] {
    self.channels = x.map { TVChannel(json:$0)! }
} else {
    self.channels = []
}

您需要处理json是和不是NSObjects数组的两种情况。 或者,您可以为属性定义默认值并将其设置为var

例如

required init?(json : NSObject) {

  if let x = json as? [NSObject] {
    channels = x.map { TVChannel(json: $0) }
  } else {
    channels = [ ]
  }

}

要么

var channels: [TVChannel] = [ ]

要么

var channels = [TVChannel]()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM