gpt4 book ai didi

ios - ArrayType findAndRemove 全局函数出错?

转载 作者:行者123 更新时间:2023-11-29 02:53:58 28 4
gpt4 key购买 nike

我正在尝试创建一个与 ArrayType 一起使用的全局 findAndRemove 函数,但遇到了问题。我收到一条错误消息:

无法将表达式的类型“0”转换为“@lvalue Named”类型

这是函数...

func findAndRemove<C : ArrayType where C.GeneratorType.Element : Equatable>(var domain: C, value: C.GeneratorType.Element) {
var idx = find(domain, value)
if idx { domain.removeAtIndex(idx! as Int) }
}

这是您可以放入 Xcode playground 中的附带的人为代码...

class Named {
let name: String
init (_ name: String) {
self.name = name
}
}

var arr = [Named("Fire"), Named("Water"), Named("Earth"), Named("Air")]
var fire = arr[0]

arr // Returns [Named("Fire"), Named("Water"), Named("Earth"), Named("Air")]
findAndRemove(&arr, fire) // <-- Error occurs here!!!
arr // Should return [Named("Water"), Named("Earth"), Named("Air")]

不要担心这个例子毫无意义,因为我可以使用 arr.removeAtIndex(0)。这是为测试 findAndRemove 而设计的示例。

最佳答案

解决方案是遵循 Equatable 协议(protocol):

class Named {  
let name: String
init (_ name: String) {
self.name = name
}
}

extension Named : Equatable { }

func ==(lhs: Named, rhs: Named) -> Bool {
return lhs.name == rhs.name
}

现在这个功能应该可以正常工作了(使用 inout var 代替):

func findAndRemove<C : ArrayType where C.GeneratorType.Element : Equatable>(inout domain: C, value: C.GeneratorType.Element) -> () {
var idx = find(domain, value)
if idx { domain.removeAtIndex(idx! as Int) }
}

我刚刚也在最后一次通话中扩展了我的答案:

var myArray: Array<Named> = [Named("Fire"), Named("Water"), Named("Earth"), Named("Air")]
var fire: Named = myArray[0]

findAndRemove(&myArray, value: fire)

关于ios - ArrayType findAndRemove 全局函数出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24142115/

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