/ / Swift Błąd podczas aktualizowania prostego zmiennego Słownika - swift

Swift Błąd podczas aktualizowania prostego mutable Dictionary - swift

Mam bardzo prosty kod Swift:

var dictionary = ["cat" : 2, "dog" : 4, "snake" : 8]
dictionary["lion"] = 7
dictionary += ["bear" : 1, "mouse" : 6]

Kompilator Swift narzeka na to:

play12.swift: 69: 1: error: "[String: Int]" nie jest identyczne z "UInt8" słownik + = ["niedźwiedź": 1, "mysz": 6]

Czego mi brakuje??

Anand

Odpowiedzi:

1 dla odpowiedzi № 1

Obecnie nie ma możliwości aktualizacji słownikaużywając operatora, ani nie sądzę, że będzie. Kiedy myślisz o różnicach między tablicami i hashtables, możliwość dodania do tablicy ma sens, ponieważ tablice są kumulatywne i sekwencyjne.

Ekspresja: myArray += value jest intuicyjny. Możesz na to spojrzeć, mówiąc: "Ja" zwiększam ten indeks tablicy, dodając te wartości ". Nie koliduje to również z poprzednimi dodatkami, ponieważ każdy nowy dodatek otrzymuje unikalny indeks.

myDict += [key : value] jest mniej intuicyjny, niektóre nieumyślne rzeczy mogąpojawić się. Na przykład: Co zrobimy, jeśli klucz już istnieje? Co się stanie, jeśli klucz jest unikalny, ale wartość hashValue istnieje? Operacja nie jest już po prostu "dołączeniem tego elementu do mojej kolekcji", teraz staje się "Próbą dołączenia tego elementu i samodzielnego rozwiązywania konfliktów".

Tak długo, krótko mówiąc, jeśli chcesz, aby ta funkcjonalność została zaimplementowana samodzielnie, powinno to dać ci pożądaną funkcjonalność. Pamiętaj, że wszystkie sprzeczne klucze zostaną nadpisane

@infix func += <T:Hashable, U:Any>(inout lhs:[T:U], rhs:[T:U]){
for (key,value) in rhs{
lhs[key] = value;
}
}

0 dla odpowiedzi nr 2

Przykład dodania jabłka do słownika:

​airports​[​"LHR"​] = ​"London"

dictionary["key"] = value

Poniższy formularz działałby tylko na tablicy, ale tablica miałaby inną postać, ponieważ nie ma kluczy: więc nie byłaby naprawdę używana do niczego.

dictionary += ["bear" : 1, "mouse" : 6]

strona 172 w szybkim przewodniku programowania na ibooks