加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift Generics问题

发布时间:2020-12-14 05:27:33 所属栏目:百科 来源:网络整理
导读:现在我希望能够看到一个对象是否包含在一个数组中,所以: func isIncludedU:Comparable(isIncluded : U) - Bool{ for item in self { if (item == isIncluded) { return true } } return false} 如果您注意到此函数属于Array扩展.问题是如果将其添加到此: e
现在我希望能够看到一个对象是否包含在一个数组中,所以:
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
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读