作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
现在我希望能够查看对象是否包含在 Array
中所以:
func isIncluded<U:Comparable>(isIncluded : U) -> Bool
{
for item in self
{
if (item == isIncluded)
{
return true
}
}
return false
}
如果你注意到这个函数属于 Array
扩大。问题是如果将其添加到此:
extension Array{
}
我收到以下错误:
Could not find an overload for '==' that accepts the supplied arguments
我知道我可能需要告诉 Array
里面应该有什么样的对象像这样:T[] <T.GeneratorType.Element: Comparable>
.但它也不起作用:
Braced block of statements is an unused closure
Non-nominal type 'T[]' cannot be extended
Expected '{' in extension
最佳答案
对于 Swift,我们需要考虑是否有一个函数可以做到这一点——在类的方法之外。
就像我们这里的例子一样:
contains(theArray, theItem)
你可以在 Playground 上试试:
let a = [1, 2, 3, 4, 5]
contains(a, 3)
contains(a, 6)
我通过 cmd 键单击 Swift 符号(示例:Array)然后查看该文件(它似乎是包含所有声明的全局文件)发现了很多这样的函数Swift 通用类和函数)。
这里有一个小扩展,可以将“包含”方法添加到所有数组:
extension Array {
func contains<T: Equatable>(item: T) -> Bool {
for i in self {
if item == (i as T) { return true }
}
return false
}
}
关于Swift 泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034119/
我是一名优秀的程序员,十分优秀!