2
我有一个协议:为什么协议中定义的重写方法在父类中被调用,而不是它的子类?
public protocol JSONMapper {
func map(fromJSON json:JSON) -> Self
}
和A类模式,我所有的模型对象继承:
class Model: JSONMapper {
func map(fromJSON json: JSON) -> Self {
return self
}
class func instances (fromJSON json:[JSON]) -> [AnyObject] {
var objects = [Model]()
for item in json {
objects.append(Model().map(fromJSON: item))
}
return objects
}
}
一个例子是:
class Workout: Model {
var uniqueID: String?
override func map(fromJSON json: JSON) -> Self {
if let value = json["UniqueID"].string { self.uniqueID = value }
return self
}
}
从以上,我希望这个功能
fun map(fromJSON json:JSON) -> Self
...从“锻炼”类,这样做时,被称为:
if let workouts = Workout.instances(fromJSON: items.arrayValue) as? [Workout] {
self.workouts = workouts
}
但事实并非如此。被调用的函数是来自父类的函数,它在“Model”类中定义。
我也尝试明确地将“Workout”类与JSONMapper协议一致,但没有成功。
谢谢!
编辑:问题的
操场例如以上:
import Foundation
public protocol JSONMapper {
func map(fromJSON json:AnyObject) -> Self
}
class Model: JSONMapper {
func map(fromJSON json: AnyObject) -> Self {
println(" model: \(self)") // Outputs: " model: __lldb_expr_83.Model"
return self
}
class func instances (fromJSON json:[AnyObject]) -> [AnyObject] {
var objects = [AnyObject]()
for item in json {
objects.append(Model().map(fromJSON: item))
}
return objects
}
}
class Workout: Model, JSONMapper {
var uniqueID: String?
override func map(fromJSON json: AnyObject) -> Self {
println(" model: \(self)")
return self
}
}
Workout.instances(fromJSON: [""]) // outputs: [__lldb_expr_83.Model]
太棒了,谢谢:) – nmdias