一尘不染

Swift泛型问题

swift

现在,我希望能够查看Arrayso中是否包含对象:

func isIncluded<U:Comparable>(isIncluded : U) -> Bool
{
    for item in self
    {
        if (item == isIncluded)
        {
            return true
        }
    }

    return false
}

如果您发现此功能属于Array扩展名。问题是如果将其添加到此:

extension Array{

}

我收到以下错误:

找不到’==’的重载,该重载接受提供的参数

在此处输入图片说明

我了解我可能需要告诉什么样的对象应该在里面,Array例如:T[] <T.GeneratorType.Element: Comparable>。但这还不起作用:

括号中的语句块是未使用的闭包
非标称类型’T []’无法
扩展

在此处输入图片说明


阅读 218

收藏
2020-07-07

共1个答案

一尘不染

使用Swift时,我们需要考虑是否有一个 函数 可以解决问题-在类的方法之外。

就像我们这里的情况一样:

contains(theArray, theItem)

您可以在操场上尝试:

let a = [1, 2, 3, 4, 5]
contains(a, 3)
contains(a, 6)

通过cmd单击Swift符号(例如 Array
),然后在该文件中四处查看,我发现了很多这些函数(该文件似乎是包含Swift通用类和函数的所有声明的全局文件)。

这是一个小扩展,它将向所有数组添加“ contains”方法:

extension Array {
    func contains<T: Equatable>(item: T) -> Bool {
        for i in self {
            if item == (i as T) { return true }
        }
        return false
    }
}
2020-07-07