当我有这个初始化程序时:
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
?
答案 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]()