数组 – 如何在swift中观察一组NSObject?
我是快速语言的新手,我的问题是如何在
swift中使用observable / observer模式.
我想让我的数组在我的SocketManager类中可观察,因此我的UIViewController类可以观察到它.我使用了Andrew J Wagner编写的Observable类,我是从这个链接获得的: http://www.drewag.me/posts/swift-kvo-substitute-observable-variables 我有阵列: var marketIndexList:Array< MarketIndex> = [] 这将从服务器获取其数据.每次从服务器收到新数据时,都会更新此列表.从服务器获取我的Array的值后,我想使它成为Observable类,它由上面的链接实现: marketIndexList = Observable(marketIndexList) 但是我收到了这个错误: ‘MarketIndex’与’AnyObject’不同 MarketIndex是一个类型为NSObject的类,它具有String类型的一些属性. 这是我用过的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中观察一系列对象的方法吗? 我将不胜感激任何帮助. 提前致谢.
该错误是因为marketIndexList被定义为Array< MarketIndex>但是你分配了Observable实例.也许你想做这样的事情:
var observableList: Observable = Observable([]) var marketIndexList: Array<MarketIndex> = [MarketIndex(),MarketIndex()] observableList.value = marketIndexList // Or maybe observableList = Observable(marketIndexList) 顺便说一下,你也可以使用Swift的Objective-C KVO.只需将属性标记为动态,并确保该类继承NSObject以使属性可观察.例如: class ObservableClass: NSObject { dynamic var value = [Int]() } 除了你提到的内容之外,这篇文章很适合在Swift中阅读KVO. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |