首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非泛型Swift类可以实现UIPickerViewDataSource,但泛型版本不能实现

非泛型Swift类可以实现UIPickerViewDataSource,但泛型版本不能实现
EN

Stack Overflow用户
提问于 2015-04-12 02:38:49
回答 1查看 423关注 0票数 1

Swift 1.2 / Xcode 6.3。

为什么这样做是有效的:

代码语言:javascript
复制
class RangeDelegateNongeneric: NSObject, UIPickerViewDataSource {
    var values = [Int]()

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return values.count
    }
}

但这不是:

代码语言:javascript
复制
class RangeDelegateGeneric<T>: NSObject, UIPickerViewDataSource {
    var values = [T]()

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return values.count
    }
}

错误:Type RangeDelegateGeneric<T> does not conform to protocol UIPickerViewDataSource

更奇怪的是,Fix消息:Candidate is not @objc, but protocol requires it在每个函数的开头加上了@objc,但这并不是Fix和Fix工具乐于重复编写@objc

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-17 18:39:28

这在SWIFT2.0中得到了修正,在Xcode 7中进行了专门的测试(本文编写时是beta 5)。

99%的人肯定这个博客片段解释了这一点,尽管一个更容易编译器和书呆子友好的显式规范声明很难找到:

https://developer.apple.com/swift/blog/?id=29

重点雷

Swift :Swift 2在Apple上工作得更好,部分原因在于Objective中的两个新特性:可空性注释和泛型。SDK已经更新为不能返回零的带注释的API,所以您不需要经常使用选项词。使用SDKs使用的真正的泛型系统,您可以更经常地在Swift 2代码中保留详细的类型信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29585371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档