我想在静态方法中使用self作为类类型,但我得到编译时错误。
这是我的测试代码:
protocol JSONMappable {
static func map(JSON: AnyObject!) -> Self
}
class Model : JSONMappable, Mappable {
required init?(_ map: Map){
}
func mapping(map: Map) {
}
static func map(JSON: AnyObject!) -> Self {
return Mapper<self>().map(JSON)
}
}
所以在静态方法映射中我想使用self作为类类型,我也试过self.Type,但我得到了同样的错误。我不想使用类名,因为我需要此方法在subclass
上调用它时使用subclass
类名。例如,如果我有:
class SubClass : Model {
}
并致电:
SubClass.map(JSON)
我需要在此方法中使用SubClass
而不是Model
。
所以我想知道这是否可行?
答案 0 :(得分:0)
protocol A {
static func f()->Self
}
// class should conform to protocol A, so the returned type should be B
final class B: A {
static func f() -> B {
return B()
}
}
let b = B()
let c = B.f()
我没有看到任何实际用法,因为最终类不能被子类化并且为了实现你的协议,该类应该被声明为final
顺便说一句,这意味着相同的protocol A {
static func f()->Self
}
final class B: A {
class func f() -> B {
return B()
}
}
没有静态
protocol A {
func f()->Self
}
class B: A {
func f()->Self {
return self
}
}
let a = B()
let b = a.f()