/ / Dlaczego Realm sugeruje, że właściwości listy <T> należy deklarować za pomocą "let"? - szybka, królestwo

Dlaczego Realm sugeruje, że właściwości List <T> należy deklarować za pomocą "let"? - szybka, królestwo

Dokumentacja królestwa na do wielu relacji deklaruje swoje List<Dog> własność let:

class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}

Dlaczego to List<T> właściwość deklarowana za pomocą let gdy deklarowane są inne typy nieruchomości dynamic var?

Odpowiedzi:

7 dla odpowiedzi № 1

List<T> właściwości należy zadeklarować za pomocą let as Realm nie jest w stanie przechwycić przypisania do tych właściwości. Przypisywanie do List<T> właściwości wygrywają, ponieważ twoje zmiany są zachowywane w pliku Realm let zamiast var wyszukujesz kompilator Swift, aby wykryć kod, który nie zrobi tego, co zamierzasz.

Zamiast przypisywać do List<T> właściwości, które powinieneś zmutować istniejąca wartość nieruchomości za pomocą metod, które są częścią RangeReplaceableCollection protokół do którego List<T> dostosowuje się.

Na przykład, aby dodać nowego psa:

person.dogs.append(lassie)

Lub w celu zastąpienia istniejących psów:

person.dogs.replaceSubrange(0..<person.dogs.count, with: [fido, spot])

Czemu?

Klasy modeli rzeczywistych implementują się automatyczniepobierające i ustawiające dla utrwalonych właściwości, które uzyskują dostęp do bazowych danych bazy danych. W celu dostarczenia tych pobierających i ustawiających, twoje właściwości muszą być zadeklarowane przy pomocy dynamic modyfikator. Ten modyfikator prosi Swift, aby dynamicznie wysyłał dostęp do właściwości za pomocą modułów pobierających i ustawiających, a nie bezpośrednio uzyskuje dostęp do elementu w czasie kompilacji. The dynamic modyfikator ma znaczące ograniczenie: jest obsługiwany tylko dla typów, które mogą być reprezentowane w Objective-C. Dzieje się tak dlatego, że dynamiczne wysyłanie Swiftu oparte jest na środowisku wykonawczym Objective-C. To ograniczenie uniemożliwia Realom przechwytywanie zadań do List<T> nieruchomości.