Swift Generics问题

前端之家收集整理的这篇文章主要介绍了Swift Generics问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现在我希望能够看到一个对象是否包含在一个数组中,所以:
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)

你可以在操场上试试:

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
    }
}
原文链接:https://www.f2er.com/swift/319253.html

猜你在找的Swift相关文章