现在我希望能够看到一个对象是否包含在一个Arrayso中:
func isIncluded<U:Comparable>(isIncluded : U) -> Bool
{
for item in self
{
if (item == isIncluded)
{
return true
}
}
return false
}
Run Code Online (Sandbox Code Playgroud)
如果您注意到此功能属于Array扩展名.问题是如果将其添加到此:
extension Array{
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
找不到接受提供的参数的'=='的重载

据我所知,我可能需要知道应该在哪个类型的物体内部Array如此:T[] <T.GeneratorType.Element: Comparable>.但它不起作用:
支撑语句块是未使用的闭包
非名义类型'T []'不能扩展
预期'{'的扩展名

使用Swift,我们需要考虑是否有一个可以解决问题的函数 - 在类的方法之外.
就像我们的情况一样:
contains(theArray, theItem)
Run Code Online (Sandbox Code Playgroud)
你可以在操场上试试:
let a = [1, 2, 3, 4, 5]
contains(a, 3)
contains(a, 6)
Run Code Online (Sandbox Code Playgroud)
我通过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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2307 次 |
| 最近记录: |