2016-03-26 6 views
0

なぜ配列オブジェクトがこの配列に存在するかどうかを確認するのにArray.contains(AnyObject)を使用します。これは、エラーになります:「の...スロータイプ変換できません - >ブール」あなたDecorationPatternsDataを動作させるcontains(_:)ための要件であるEquatableに準拠していないためだSwift:配列に(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 
    } 
} 

答えて

0
... 

if let pickedDecorationPattern = pickedDecorationPattern { 
    if decorationPatterns.contains(pickedDecorationPattern) { 
     // Error: Cannot convert type of ... throw -> Bool 
    } 
} 
2

を。


解決方法1:

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(_:)

関連する問題