2016-10-16 9 views
7

hızlı belli bir değer içerir. Ben yazarak Ben sadece Bool dönmek gerekir içeride bildiğim bu nasıl kullanılacağını anlamıyorumSözlük</p> <pre><code>Dictionary<String, AnyObject> </code></pre> <p>Ben diziler .Contains yüzden bir sözlük de yapar düşünürdüm biliyorum ben bir dize benim Sözlükte değerlerden herhangi var olup olmadığını kontrol etmek istiyorum 3

countDic.contains(where: { ((key: String, value: AnyObject)) -> Bool in 
      <#code#> 
     }) 

içeren başlattığınızda Xcode aşağıdaki kullanmak söyler, ama ne Dize nereye koyduğunu anlamıyorum Arıyorum. Herhangi bir yardım harika olurdu.

+0

Sık sık, dizilerini ya bir yapı veya sınıf söylemek kullanıyorsunuz bu gibi kod kullanışlı '(things.map {$ 0.field}). içerir (blah) ' – Fattie

cevap

8

contains(where:) çek kullanabileceği bir dize ( içeren ziyade) eşit istiyorsa denetlemek istediğiniz Ancak eğer

let countDic : [String:Any] = ["alpha" : 1, "beta" : "foo", "gamma" : "bar"] 

countDic.contains { (key, value) -> Bool in 
    if let string = value as? String { return string.contains("oo") } 
    return false 
} 

koleksiyonun herhangi bir unsuru verilen yüklemeyi karşılarsa, bu durumda sizin durumunuza göre

şirketinden sözlük values görünüme uygulanan

veya: bu için gerekli olan, her iki durumda da

let b = countDic.values.contains { (value) -> Bool in 
    value as? String == givenString 
} 

(isteğe bağlı olarak), belirli bir dizeye ile karşılaştırmak amacıyla bir String için AnyObject dökme.

O kullanılabilecek tip Dictionary<String, String> dizeleri çünkü Equatable, bir sözlük ve contains(element:) yöntemle biraz daha kolay olurdu:

let b = countDic.values.contains(givenString) 
2

Değeriniz Swift 3'teki AnyObject - Any olduğundan - değerin bir dize olup olmadığını kontrol etmeniz gerekir. Varsa, değerin alt dizeyi içerip içermediğini kontrol edin. Eğer değerlerden herhangi ayrıca filter fonksiyonu ve isEmpty

!countDic.filter { (key, value) -> Bool in 
    value as? String == "foo" 
}.isEmpty 
1

Önce Dictionary s için contains(where:) temel kullanımını öğrenmek gerekebilir : [String: Int] için

:

let myIntDict1: [String: Int] = [ 
    "a" : 1, 
    "b" : 101, 
    "c" : 2 
] 
let myIntDict1ContainsIntGreaterThan100 = myIntDict1.contains { 
    key, value in //<- `value` is inferred as `Int` 
    value > 100 //<- true when value > 100, false otherwise 
} 
print(myIntDict1ContainsIntGreaterThan100) //->true 
için

: Yani

let myStringDict1: [String: String] = [ 
    "a" : "abc", 
    "b" : "def", 
    "c" : "ghi" 
] 
let myStringDict1ContainsWordIncludingLowercaseE = myStringDict1.contains { 
    key, value in //<- `value` is inferred as `String` 
    value.contains("e") //<- true when value contains "e", false otherwise 
} 
print(myStringDict1ContainsWordIncludingLowercaseE) //->true 

, [String: AnyObject] ile:

let myAnyObjectDict1: [String: AnyObject] = [ 
    "a" : "abc" as NSString, 
    "b" : 101 as NSNumber, 
    "c" : "ghi" as NSString 
] 
let myAnyObjectDict1ContainsWordIncludingLowercaseE = myAnyObjectDict1.contains { 
    key, value in //<- `value` is inferred as `AnyObject` 
    //`AnyObject` may not have the `contains(_:)` method, so you need to check with `if-let-as?` 
    if let stringValue = value as? String { 
     return value.contains("e") //<- true when value is a String and contains "e" 
    } else { 
     return false //<- false otherwise 
    } 
} 
print(myAnyObjectDict1ContainsWordIncludingLowercaseE) //->false 

Yani, sizin durumda:

let countDic: [String: AnyObject] = [ 
    "a" : 1 as NSNumber, 
    "b" : "no" as NSString, 
    "c" : 2 as NSNumber 
] 
let countDicContainsString = countDic.contains { 
    key, value in //<- `value` is inferred as `AnyObject` 
    value is String //<- true when value is a String, false otherwise 
} 
print(countDicContainsString) //->true 
İlgili konular