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-it消息:Candidate is not @objc, but protocol requires it
将@objc
添加到每个函数的开头,但这并不是Fix-it,而Fix-it工具很开心重复提前@objc
!
答案 0 :(得分:1)
这已在Swift 2.0中修复,特别是在Xcode 7(本文撰写时为beta 5)中进行了测试。
99%确定这个博客片段解释了它,虽然更难以找到更加编译器 - 书呆子友好的显式规范声明:
https://developer.apple.com/swift/blog/?id=29
[强调我的]
Swift-er SDK:感谢使用Apple SDK,Swift 2工作得更好 部分是Objective-C中的两个新功能:可空性注释 和泛型。 SDK已更新为注释不能的API 返回nil,因此您不需要经常使用选项。和一个 SDK使用的真正的泛型系统您可以更经常地保留 Swift 2代码中的详细类型信息。