2016-05-03 3 views
1

У меня есть класс, похожее на это:Один-к-одному царство с новыми Живыми обратными отношениями

class Flight: Object { 

dynamic var flightNumber = "" 
dynamic var departureApt = "" 
dynamic var arrivalApt = "" 

dynamic var nextFlight : Flight? 
dynamic var previousFlight : Flight? 

} 

A «Полет» может содержать nextFlight и/или previousFlight, но не гарантируются. Моя цель - запросить рейс и проверить, является ли он ребенком другого рейса (следующего или предыдущего родительского полета).

Перед Realm 0,100 я извлек из родителей, используя этот код:

if let parent = flight.linkingObjects(Flight.self, forProperty: "previousFlight").first { 
     print("This flight has a parent flight: \(parent.flightNumber)") 
} 

теперь я не уверен, как добиться того же с Realm 0,100 и хотел бы некоторую обратную связь!

EDIT

Теперь я смог добиться результата, я хотел, но я не уверен, что это правильный способ сделать это. Я добавил переменную, которая находит родителю таким образом:

let parentForNext = LinkingObjects(fromType: Flight.self, property: "nextFlight") 
let parentForPrevious = LinkingObjects(fromType: Flight.self, property: "previousFlight") 

var parent : Flight? { 

    get { 

     return parentForNext.first ?? parentForPrevious.first ?? nil 

    } 

} 

ответ

1

Метод Object.linkingObjects(_:property:) был устаревшим в Realm Swift 0,100 (см release post для более).

Это потому, что существует более мощный (хотя и несколько более подробный) способ объявления обратных отношений в Царстве: через тип свойства LinkingObjects на моделях. Это позволяет привязывать объекты к действию, например, жить, автоматически обновлять List или Results. Таким образом, вы знаете, что объекты, которые вы вернетесь, никогда не будут устаревшими, что особенно важно, учитывая, что все другие типы Realm автоматически обновляются. Он также позволяет запрашивать обратные отношения, как если бы они были отношениями вперед (List).

Так что, если вы сделали это до 0,100:

let parent = flight.linkingObjects(Flight.self, forProperty: "previousFlight").first 

Эквивалент это в 0,100, а затем (по модели):

let parents = LinkingObjects(fromType: Flight.self, property: "previousFlight") 
var parent: Flight? { return parents.first } 

В вашем втором примере кода, у вас есть несколько " родители », и да, вы можете иметь рассчитанное свойство, которое объединяет их любым способом:

let nextParent = LinkingObjects(fromType: Flight.self, property: "nextFlight") 
let previousParent = LinkingObjects(fromType: Flight.self, property: "previousFlight") 
var parent: Flight? { return nextParent.first ?? previousParent.first } 

Вы можете больше узнать об обратных отношениях в документах Realm по теме: https://realm.io/docs/swift/latest/#inverse-relationships

Смежные вопросы