基于我的这个问题(以及公认的答案),我想测试数组中值的包含情况。
该值存储在类型定义为 的变量中Any
,数组定义为[Any]
。
变量中存储的值的实际类型和数组中的元素在运行时决定,但保证满足以下条件:
- 两种类型(变量和数组元素)重合,并且
- 它们是或
String
之一。Int
Bool
到目前为止,我得到了这段代码:
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))
})
...但是对使用协议的限制Equatable
阻碍了。有什么建议吗?