为什么我使用 Array.contains(AnyObject) 来检查此数组中是否存在结构对象。它会出错:“无法转换类型 ... throw -> Bool”
struct DecorationPatternsData {
let patternImageName: String
init(patternImageName: String) {
self.patternImageName = patternImageName
}
}
var decorationPatterns : [DecorationPatternsData] = [DecorationPatternsData(patternImageName: "decoration1.gif"), DecorationPatternsData(patternImageName: "decoration1.gif"), DecorationPatternsData(patternImageName: "decoration1.gif")]
var pickedDecorationPattern : DecorationPatternsData? = nil
...
if (pickedDecorationPattern != nil) {
if (decorationPatterns.contains(pickedDecorationPattern)) {
// Error: Cannot convert type of ... throw -> Bool
}
}
最佳答案
那是因为您的 DecorationPatternsData
不符合 Equatable
,这是 contains(_:)
工作的要求。
解决方案一:
extension DecorationPatternsData: Equatable { }
func ==(lhs: DecorationPatternsData, rhs: DecorationPatternsData) -> Bool {
return lhs.patternImageName == rhs.patternImageName
}
现在 DecorationPatternsData
符合 Equatable
所以你可以使用:
if let pickedDecorationPattern = pickedDecorationPattern {
if decorationPatterns.contains(pickedDecorationPattern) {
// Your code
}
}
解决方案 2:
if decorationPatterns.contains({ $0 == pickedDecorationPattern }) {
// Your code
}
这里您使用闭包来比较元素,为 contains(_:)
返回一个 bool 值
关于Swift: Array contains(AnyObject) error Cannot convert type of ... throw -> Bool 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36231803/