Swift - 实例"不能用' ...."来自"静态"方法

时间:2014-07-27 01:07:49

标签: ios swift

当我尝试通过“静态”方法(从协议中需要)实例化一个类时,编译器无法识别初始化程序,尽管我传递了正确的参数。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

问题在于您正在定义名为" Comment"的模板。在您的方法声明中隐藏了真正的Comment类。您需要为该模板参数指定一个不同的名称。

我相信你的JSONSerializable协议没有按照你想要的方式定义。您可以在协议中使用Self来引用实现协议的类,因此不需要模板。您的协议可能如下所示:

protocol JSONSerializable {
    class func instanceFrom(json: [String:AnyObject]) -> Self;
}

然后,您将在Comment类中实现此方法:

class Comment: JSONSerializable {
    ...

    class func instanceFrom(json: [String:AnyObject]) -> Comment {
        return Comment(message: "lorem lorem", author: User())
    }
}

但是,Swift最好使用初始化器而不是类方法:

protocol JSONSerializable {
    init(json: [String:AnyObject])
}

class Comment: JSONSerializable {
    ...

    init(json: [String : AnyObject]) {
    }
}