我有一个自定义类,我想使用JSONCodable https://github.com/matthewcheok/JSONCodable
从JSON对象初始化所以我有
public var id: String
public var name: String?
public var imageURL: NSURL?
和一个符合JSONCodable协议的可用初始化程序
required public init?(JSONDictionary: JSONObject) {
let decoder = JSONDecoder(object: JSONDictionary)
do {
id = try decoder.decode("id")
name = try decoder.decode("name")
if let imageURLString: String = try decoder.decode("image") {
imageURL = NSURL(string: imageURLString)
}
}
catch let error as NSError{
NSLog("\(error.localizedDescription)")
return nil
}
}
我在'Return nil'语句中遇到编译器错误: 必须初始化类实例的所有存储属性,然后才能从初始化器返回nil。 除了设置虚拟值之外,有没有办法解决这个问题?我想要包含的一个属性是只读的,我真的不想创建一个setter只是为了绕过编译器。 我正在使用类,而不是JSONCodable示例代码中的结构,因为我想要子类。 一种可能性是有一个非失败的初始化器抛出错误,但这不符合JSONCodable协议。 我对Swift很新,任何关于如何处理这个的指针都会非常受欢迎。
答案 0 :(得分:0)
在此答案的帮助下修复:Best practice to implement a failable initializer in Swift(此处提到https://github.com/matthewcheok/JSONCodable/issues/5)
所以现在我有了
public var id: String!
id现在被隐式解包,因此它的默认值为nil。