gpt4 book ai didi

Swift 泛型问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:35 24 4
gpt4 key购买 nike

现在我希望能够查看对象是否包含在 Array 中所以:

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

enter image description here

我知道我可能需要告诉 Array 里面应该有什么样的对象像这样:T[] <T.GeneratorType.Element: Comparable> .但它也不起作用:

Braced block of statements is an unused closure
Non-nominal type 'T[]' cannot be extended
Expected '{' in extension

enter image description here

最佳答案

对于 Swift,我们需要考虑是否有一个函数可以做到这一点——在类的方法之外。

就像我们这里的例子一样:

contains(theArray, theItem)

你可以在 Playground 上试试:

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
}
}

关于Swift 泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com