当我尝试通过“静态”方法(从协议中需要)实例化一个类时,编译器无法识别初始化程序,尽管我传递了正确的参数。
答案 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]) {
}
}