处理Swift中的初始化失败

时间:2015-12-22 10:09:52

标签: ios swift initialization init

我有一个自定义类,我想使用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很新,任何关于如何处理这个的指针都会非常受欢迎。

1 个答案:

答案 0 :(得分:0)

在此答案的帮助下修复:Best practice to implement a failable initializer in Swift(此处提到https://github.com/matthewcheok/JSONCodable/issues/5

所以现在我有了

 public var id: String!

id现在被隐式解包,因此它的默认值为nil。