【问题标题】:swift generic overriding function快速的通用覆盖函数
【发布时间】:2015-03-24 18:22:26
【问题描述】:
class BaseClass: NSObject, Printable, Equatable {
    func fromJson(json: [String: AnyObject]) {
    }
}
class SubClass: BaseClass{
    func fromJson(json: [String: AnyObject]) {
    }
}

func somefunc<T: BaseClass>(json: [String: AnyObject], success: (([T]) -> Void)?) {
    let t = T()
    t.fromJson(json)
}

somefunc(json, { (t: SubClass) -> Void in 
})

SubClass 的 fromJson 没有被调用?

我做错了吗? 还是 swift 中的通用性如何?

更新 Swift generics not preserving type 为我工作

【问题讨论】:

  • 很确定你发现了一个编译器错误。试图重现缩减版...
  • 本质上,这是stackoverflow.com/q/26280176/3804019的骗子。你需要override required init() { } in BaseClass
  • 而且,如果您使用的是 Xcode 6.1 或 6.2,您还需要 (T.self as T.Type)() 而不是 T()
  • 已被 Swift 开发团队确认为一个错误(还要注意,未优化和优化的构建之间会出现不同的行为)。

标签: swift generics


【解决方案1】:

对我来说似乎是一个错误。 T 应该是 SubClass 类型,但不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多