2015-01-28 3 views
1

Мне нужно использовать наблюдателей свойств для обновления моих представлений при изменении объекта модели. Я думаю, что это отличный ненавязчивый способ сделать это, особенно потому, что представления, которые мне нужно обновить, не находятся в пределах досягаемости кода, выполняющего изменение.Наблюдатели за объектом (KVO): они все еще могут пойти?

Я просто добавил наблюдатель вроде этого:

someObject.addObserver(observer, forKeyPath:"name", options:NSKeyValueObservingOptions.New, context:nil) 

А затем реализован этот метод внутри «наблюдателя»

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { 
    // Do my thing 
} 

Это IOS API наблюдатель чувствует немного устаревшее по какой-то причине. Поэтому мне было интересно: это все еще способ пойти в iOS? Или есть лучшие альтернативы в настоящее время для реализации такого типа наблюдаемого/наблюдаемого типа?

EDIT: Похоже, что наблюдатели за недвижимостью (KVO) даже не работают с Swift. Так что в любом случае мне нужен другой подход

+0

Вам не нужны методы didSet и willSet, как описано здесь: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html –

+0

Спасибо за ваш ответ ! Да, я знаю о didSet и willSet. Но это не решает это для меня, потому что мне не нужно обрабатывать изменение свойства внутри того же класса. Мне нужно обрабатывать его где-то еще целиком, внутри представления, которое имеет один и тот же экземпляр этого объекта. –

+0

Хорошо, в этом случае я не уверен, что лучший образец. –

ответ

1

Если вы хотите попробовать что-то новое, которое начинается с KVO, тогда открывается мир возможностей, рассмотрим возможность функционального реактивного программирования и ReactiveCocoa.

Помимо репо GitHub я связан выше (полный documentation), вы можете найти много вводных учебников по сети, например:

Этот метод был успешно использован в нескольких проектах, и есть куча вдохновляющих образцов кода, которые вы можете найти онлайн.

Для справки, настоящий проект с использованием ReactiveCocoa - это Artsy Eidolon project.

+0

Я видел презентацию на этот раз. Это выглядело круто! Но у меня сложилось впечатление, что это «все или ничего». Таким образом, вы либо делаете все так, либо вы совсем не делаете. Это так? Или я могу использовать его только для одного случая использования и оставить остальное приложение как есть? –

+1

Одна из приятных вещей в ReactiveCocoa (RAC) заключается в том, что вы можете использовать ее только здесь и там в существующем приложении, где вы чувствуете уверенность в этом :) Вам не требуется конвертировать всю вашу базу кода, и никто не заставляет вас использовать более продвинутые функции.Хорошая отправная точка, например, имеет ваш экран входа (как правило, довольно автономный) на основе RAC, в то время как остальная часть вашего приложения написана в стиле, который вам больше всего нравится. – Para

+0

Спасибо! Я проверю это! –

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