gpt4 book ai didi

ios - 测试定义为 Any 的值的数组包含,但保证属于同一类型。

转载 作者:行者123 更新时间:2023-11-29 01:24:44 25 4
gpt4 key购买 nike

基于 this question of mine (和接受的答案),我想测试数组中值的包含。

该值存储在定义为 Any 类型的变量中,数组定义为 [Any]

存储在变量中的值和数组中的元素的实际类型在运行时决定,但保证满足以下条件:

  1. 两种类型(变量和数组元素)一致,并且
  2. 它们是StringIntBool 之一。

到目前为止,我的代码可以正常工作:

var isContained = false

if let intValue = anyValue as? Int {
isContained = arrayOfAny.contains({element in return ((element as? Int) == intValue)})
}
else if let stringValue = anyValue as? String {
isContained = arrayOfAny.contains({element in return ((element as? String) == stringValue)})
}
else if let boolValue = anyValue as? Bool {
isContained = arrayOfAny.contains({element in return ((element as? Bool) == boolValue)})
}

但是,有很多逻辑重复,我希望我可以让它更聪明,也许是这样的:

isContained = arrayOfAny.contains({element in 
return ((element as? Equatable) == (anyValue as? Equatable))
})

...但是对协议(protocol) Equatable 的使用的限制阻碍了这一点。有什么建议吗?

最佳答案

我现在明白你要做什么了。这是一个如何让它工作的例子

let arrayOfAny:[AnyObject] = [1,7,9,true, "string"]
func getAny(value:AnyObject) -> [AnyObject]{
return self.arrayOfAny.filter ({$0 === value})
}

上述函数将返回一个匹配数组,理想情况下应该是单个结果或空数组。

例子:

self.getAny(1) // [1]
self.getAny(0) // []

您也可以修改它以简单地返回一个 Bool

func getAny(value:AnyObject) -> Bool{
return self.arrayOfAny.filter ({$0 === value}).count > 0
}

例子:

self.getAny(1) // true
self.getAny(0) // false

编辑:

正如 Martin R 所提到的,这并不总是有效。不幸的是,在发布此答案之前我没有对其进行全面测试。玩了一会儿之后,我想出了与 NicolasMiari 非常相似的方法:

let arrayOfAny:[AnyObject] = [1,Int.max,9,true, "string"]
func getAny(anyValue:AnyObject) -> [AnyObject]{
return self.arrayOfAny.filter ({
var exist:Bool
switch anyValue.self{
case is String: exist = $0 as? String == anyValue as? String
break
case is Int: exist = $0 as? Int == anyValue as? Int
break
case is Bool: exist = $0 as? Bool == anyValue as? Bool
break
default: exist = false
}
return exist
})

这种方法的缺点是调用 self.getAny(1) 时将返回 int 1true,结果将be [1,1] as 1 and true 可以成功转换为 IntBool 而不是仅仅返回 [1]。换句话说,如果您的数组中只有 true 而没有 Int 1,您仍然会得到肯定的结果,就好像它存在于您的数组中一样。反之亦然。

关于ios - 测试定义为 Any 的值的数组包含,但保证属于同一类型。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34153315/

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