/ / Dostęp do niestandardowej właściwości obiektu podczas iteracji po słowniku - swift

Uzyskaj dostęp do właściwości obiektu niestandardowego podczas iteracji słownika - swift

Mam kilka obiektów

Struct object {
var title:String?
}

var one = object("green")
var two = object("black")
var three = object("blue")

Mam też słownik

var dict = ["a":[one, two], "b":[three]]

To, czego chcę, to iteracja po wartościach słownikowych i znalezienie wszystkich obiektów, które zaczynają się od „b”.

Pomyślałem o czymś takim

for (key, value) in dict {
if value.lowercaseString.containsString(searchText.lowercaseString)
}

ale pojawia się błąd

value of type [object] has no member "lowercaseString"

jak mam sobie z tym poradzić?

Odpowiedzi:

1 dla odpowiedzi № 1

iterujesz po słowniku, patrząc na jego klucze i wartości.

Ale wartości nie są łańcuchami, ale tablicami łańcuchów.

zrobić

import Foundation

struct object {
var title:String?
}

var one = object(title:"green")
var two = object(title:"black")
var three = object(title:"blue")

var dict = ["a":[one, two], "b":[three]]

for (key, value) in dict {
for obj in value {
if let title = obj.title {
if title.lowercaseString.containsString(searchText.lowercaseString) {
// ...
}
}
}

}

0 dla odpowiedzi nr 2

Twój value jest tablicą obiektu „[obiekt]”, ale nie ciągiem znaków, zgodnie z definicją w kodzie powyżej:

var dict = ["a":[one, two], "b":[three]]

Więc musisz przetworzyć wartość jako tablicę objectaby dowiedzieć się, czego chcesz.

for (key, value) in dict {
let found = value.filter({ (anObject: object) -> Bool in
return anObject.title!.lowercaseString.containsString("b")
})

if (found.count > 0) {
//you find what you want.
}
}