Swift 1.2 / Xcode 6.3。
为什么这样做是有效的:
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
}
}但这不是:
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!
发布于 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代码中保留详细的类型信息。
https://stackoverflow.com/questions/29585371
复制相似问题