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

时间:2015-11-20 13:42:50

标签: swift

当我有这个初始化程序时:

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

的属性

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

e.g。

required init?(json : NSObject) {

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

}

var channels: [TVChannel] = [ ]

var channels = [TVChannel]()