Swift self in static方法

时间:2015-10-27 15:12:55

标签: swift

我想在静态方法中使用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。 所以我想知道这是否可行?

1 个答案:

答案 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()