【发布时间】:2015-06-25 12:02:16
【问题描述】:
我目前正在快速学习。在学习时,我被泛型所困扰。我正在解决一个简单的问题,即 -> 返回数组中指定元素的索引
import UIKit
extension Array
{
func indexOfLetter<T:Equatable>(item:T) -> Int
{
var i = 0
for (index, value) in enumerate(self)
{
if value == item
{
return i
}
i++
}
return -1;
}
}
var arrayOfItems = ["A","B"]
arrayOfItems.indexOfLetter("A")
在这段代码中,我遇到了我们的错误
无法使用 == 运算符比较 T 类型的两个操作数。
【问题讨论】:
-
它没有描述您的问题,但您可以消除
var i和当前不必要地未使用的return index...并且该方法会更好地返回Int?并在未找到时传回nil而不是-1。 -
这与引用问题中的问题相同:您不能在对模板更严格的泛型类型上编写方法。 – 在 Swift 1.2 中,您将不得不定义一个全局函数。在 Swift 2 中,您可以通过协议扩展来解决它。
-
我通过打开对象找到了解决方案。导入 UIKit 扩展数组 { func indexOfLetter
(item:U) -> Int { var i = 0 for (index, value) in enumerate(self) { if (value as!NSString) == (item as! NSString) { return i } i++ } return -1; } } var arrayOfItems:Array = ["A","B"] arrayOfItems.indexOfLetter("B")