Swift: Array contains(AnyObject) error Cannot convert type of ... throw -> Bool 错误

标签 swift swift2 contains

为什么我使用 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/

相关文章:

java - 检查子字符串是否在忽略大写、小写和特殊字符的字符串中?

python - 列包含列

Javascript数组包含元素

ios - 基于时间执行功能

parse-platform - 使用 Swift 1.2 注册解析用户

Swift:符合协议(protocol)的AnyClass变量

arrays - 如何快速比较变量 String() 和字符串?

swift - 对数组关联类型的限制

ios - 安全解包可选值

swift - 在 Xcode 7 中构建 Parse 时出现链接错误