Я новичок в быстром языке, и моя проблема заключается в том, как использовать наблюдаемый/наблюдательный паттерн в swift.Как наблюдать массив NSObjects в swift?
Я хочу, чтобы мой массив наблюдался в моем классе SocketManager, поэтому его можно наблюдать по моему классу UIViewController. Я использовал Observable класса, написанный Эндрю Дж Вагнер, который я получил от этой ссылки:
http://www.drewag.me/posts/swift-kvo-substitute-observable-variables
У меня есть массив:
уага marketIndexList: Array < MarketIndex> = []
который получит свои данные с сервера. Этот список будет обновляться каждый раз, когда будут получены новые данные с сервера. После того, как я получил значение моего массива от сервера я хочу сделать его типа наблюдаемого класса, который реализуется по ссылке выше:
marketIndexList = Наблюдаемый (marketIndexList)
Но я получил эту ошибку:
«MarketIndex» не идентичен «AnyObject»
MarketIndex - это класс типа NSObject, который имеет некоторые свойства типа String.
Это Наблюдаемые класс, который я использовал:
import Foundation
class Observable {
typealias DidChangeHandler = (oldValue: Array<MarketIndex>?, newValue: Array<MarketIndex>) ->()
var value : Array<MarketIndex> = [] {
didSet {
for (owner, handlers) in self.observers {
for handler in handlers {
handler(oldValue: oldValue, newValue: value)
}
}
}
}
init(_ value: Array<MarketIndex>) {
self.value = value
}
func addObserverForOwner(owner: IndexViewController, triggerImmediately: Bool, handler: DidChangeHandler) {
if let index = self.indexOfOwner(owner) {
// since the owner exists, add the handler to the existing array
self.observers[index].handlers.append(handler)
} else {
// since the owner does not already exist, add a new tuple with the
// owner and an array with the handler
self.observers.append(owner: owner, handlers: [handler])
}
if (triggerImmediately) {
// Trigger the handler immediately since it was requested
handler(oldValue: nil, newValue: self.value)
}
}
func removeObserversForOwner(owner: AnyObject) {
if let index = self.indexOfOwner(owner) {
self.observers.removeAtIndex(index)
}
}
// #pragma mark - Private Properties
var observers: [(owner: IndexViewController, handlers: [DidChangeHandler])] = []
// #pragma mark - Private Methods
func indexOfOwner(owner: AnyObject) -> Int? {
var index : Int = 0
for (possibleOwner, handlers) in self.observers {
if possibleOwner === owner {
return index
}
index++
}
return nil
}
}
Может кто-нибудь сказать мне, в чем проблема?
Также кто-нибудь знает способ наблюдения за массивом объектов в swift?
Буду признателен за любую помощь.
Заранее спасибо.
Спасибо, но это не решит мою проблему. Такая же ошибка все еще существует в этой строке: marketIndexList = Observable (marketIndexList) Я не могу сделать свой массив видимым. – user2366997
Извините, у меня возникло недоразумение, что вы хотели использовать Objective-C KVO от Swift. Я отредактировал свой ответ. –
Спасибо за среднюю ссылку, я скорее использую этот подход, чтобы мы могли максимально использовать скорость! – gbdavid