2016-08-06 8 views
5

Próbuję powtórzyć nad wynikami z kwerendy dziedziny w Swift 2. Są przechowywane dwa obiekty klasy PersonClass.Jak iterować po wynikach w królestwie z Swift

Wyniki z kwerendy są poprawne i zawierają dwa obiekty klasy PersonClass, ale w przypadku powtarzania wyników, właściwość name to puste ciągi.

class PersonClass: Object { 
    var name = "" 
} 

let realm = try! Realm() 

@IBAction func button0Action(sender: AnyObject) { 
    let results = realm.objects(PersonClass) 

    print(results) //prints two PersonClass object with the name property populated 

    for person in results { 
     let name = person.name 
     print(name) //prints and empty string 
    } 
} 

Odpowiedz

7

Problem polega na tym, że pominięto dynamic modyfikator z deklaracją właściwości w swojej klasie modelu. Modyfikator dynamic jest niezbędny do zapewnienia, że ​​Realm ma możliwość przechwycenia dostępu do właściwości, dając Realowi możliwość odczytu/zapisu danych z pliku na dysku. Pominięcie tego modyfikatora powoduje, że kompilator Swift uzyskuje bezpośredni dostęp do zmiennych instancji, wycinając Realm z pętli.

+0

Dziękuję. Idealnie jasna odpowiedź. Ponieważ wskazałeś mi właściwy kierunek, dodałem odpowiedź z dodatkowymi informacjami, by móc z niej skorzystać w przyszłości. – Jay

0

Dynamiczny

Informuje czas pracy do korzystania z dynamicznego na statyczny wysyłkę wysłania do funkcji lub zmiennych zmodyfikowanej

Pośrednio dodaje @objc atrybut deklaracji zmiennej lub funkcji.

Wszystko, co używa słowa kluczowego dynamic, używa środowiska wykonawczego Objective-C zamiast środowiska wykonawczego Swift do wysyłania do niego wiadomości.

Dynamiczny jest przydatny w sytuacjach związanych z analityką aplikacji, ale optymalizuje ofiary dzięki wysyłce statycznej.

Dynamiczna wysyłka zapewnia lepszą zgodność operacyjną z funkcjami wykonawczymi Objective-C, takimi jak Core Data, która opiera się na KVC/KVO.

I od Swift Language Reference

Zastosuj ten modyfikator do jakiegokolwiek członka klasy, które mogą być reprezentowane przez Objective-C. Po zaznaczeniu deklaracji elementu z dynamicznym modyfikatorem dostęp do tego elementu jest zawsze dynamicznie wywoływany za pomocą środowiska wykonawczego Objective-C. Dostęp do tego elementu nigdy nie jest zainicjowany ani nie został zdekonfigurowany przez kompilator.