我的协议“模型”和符合“模型”的类“设备”有点问题。 在我的协议中,我有一个函数,其返回值为“Model”。在我的课程中,我有这个实现功能,并希望将返回类型从“模型”更改为“设备”。但如果我改变这个,我必须再次添加原始功能。
我的模型协议:
protocol Model {
func fromJSON(jsonString : String) -> Model
}
我的设备类:
class Device : Model {
func fromJSON(jsonString: String) -> Model {
var jsonObj = JSON(jsonString)
var device = Device()
return device
}
}
当我尝试将此函数的结果分配给Device变量时,我收到此错误消息:
无法将“Model”类型的值分配给“Device”类型的值
let jsonString: String = "MY ARRAY";
var device2 = Device()
device2 = Device().fromJSON(jsonString)
答案 0 :(得分:3)
您的Model
协议作出承诺:
func fromJSON(jsonString : String) -> Model
它承诺返回一些 Model
。它不承诺返回与实现者相同类型的Model
。如果你的意思是,它被称为Self
。
protocol Model {
func fromJSON(jsonString : String) -> Self
}
使用类,实现起来有点痛苦。理想情况下,您的设备应该是一个结构,这使它变得微不足道。但是如果你标记了类final
,那么它也没关系:
protocol Model {
static func fromJSON(jsonString : String) -> Self
}
final class Device : Model {
class func fromJSON(jsonString: String) -> Device {
let device = Device()
return device
}
}
但实际上,整个协议毫无意义。你真正想要的是一个初始化器:
protocol Model {
init(jsonString : String)
}
class Device : Model {
required init(jsonString: String) {
...
}
}