2016-03-26 40 views
0

Neden Array.contains (AnyObject) öğesini bu dizide bir yapı nesnesinin var olup olmadığını kontrol etmek için kullanıyorum. Bu hatayı yapar: "Herkes, ... atma tipini dönüştürülemez -> Bool" sizin DecorationPatternsDatacontains(_:) çalışmak için bir gereksinimdir Equatable uymuyor çünkü ThatSwift: Array, (AnyObject) hatasını içeriyor ... türünü dönüştüremiyor ... -> 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 
    } 
} 

cevap

0
... 

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

.


Çözüm 1:

extension DecorationPatternsData: Equatable { } 

func ==(lhs: DecorationPatternsData, rhs: DecorationPatternsData) -> Bool { 
    return lhs.patternImageName == rhs.patternImageName 
} 

Şimdi DecorationPatternsDataEquatable uymak üzere kullanabilirsiniz:

if let pickedDecorationPattern = pickedDecorationPattern { 
    if decorationPatterns.contains(pickedDecorationPattern) { 
    // Your code 
    } 
} 

Çözüm 2:

if decorationPatterns.contains({ $0 == pickedDecorationPattern }) { 
    // Your code 
} 

Burada, öğeleri karşılaştırmak için bir kapatma kullanıyorsunuz. contains(_:)

İlgili konular