【发布时间】:2015-04-12 02:38:49
【问题描述】:
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 !
【问题讨论】:
-
您在哪一行收到此错误?我将泛型类复制到我的游乐场,它似乎编译得很好。
-
泛型类不能成为 Foundation 方法的代表,例如,请参阅此答案:stackoverflow.com/a/26104946/1187415。
-
谢谢。在实践中,这给了我我需要知道的东西。虽然编译器的错误消息是明确的证据,但如果您可以指出 Apple 技术文档中对此进行了解释,我很高兴为您提供答案。我很沮丧,因为我无法在任何规范中明确说明这一事实。
标签: xcode swift protocols generics