我是一名刚接触Swift语言的新手,我的问题与如何在Swift中使用可观察/观察者模式有关。
我想要让我的数组在SocketManager类中成为可观察的,以便UIViewController类可以观察它。我使用了Andrew J Wagner编写的Observable类,我从这个链接中获取了它:
http://www.drewag.me/posts/swift-kvo-substitute-observable-variables
我有一个数组:
var marketIndexList: Array< MarketIndex > = []
它将从服务器获取数据。每当从服务器接收到新数据时,此列表将更新。在从服务器获取数组的值之后,我想将其转换为上面链接实现的Observable类:
marketIndexList = Observable(marketIndexList)
但我得到了这个错误:
'MarketIndex'不等同于'AnyObject'
MarketIndex是NSObject类型的类,具有某些字符串类型的属性。
这是我使用的Observable类:
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中如何观察对象数组吗?
非常感谢任何帮助。
提前致谢。