Swift Generics问题

Rui*_*res 7 swift

现在我希望能够看到一个对象是否包含在一个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 []'不能扩展
预期'{'的扩展名

在此输入图像描述

Jea*_*nan 8

使用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)