Tôi mới bằng ngôn ngữ nhanh và vấn đề của tôi là về cách sử dụng mẫu quan sát/quan sát nhanh chóng.Làm thế nào để quan sát một loạt các NSObjects nhanh chóng?
Tôi muốn làm cho mảng của mình có thể quan sát được trong lớp SocketManager của tôi để lớp UIViewController của tôi có thể quan sát nó. Tôi đã sử dụng lớp Quan sát được viết bởi Andrew J Wagner mà tôi nhận được từ liên kết này:
http://www.drewag.me/posts/swift-kvo-substitute-observable-variables
Tôi có mảng:
var marketIndexList: Array < MarketIndex> = []
sẽ nhận dữ liệu từ máy chủ. Danh sách này sẽ được cập nhật mỗi lần một dữ liệu mới nhận được từ máy chủ. Sau khi tôi nhận được các giá trị của mảng của tôi từ máy chủ tôi muốn làm cho nó của kiểu lớp Quan sát được thực hiện bởi liên kết ở trên:
marketIndexList = Quan sát (marketIndexList)
Nhưng tôi đã nhận lỗi này:
'MarketIndex' không giống với 'AnyObject'
MarketIndex là loại thuộc loại NSObject có một số thuộc tính của loại Chuỗi.
Đây là lớp học Quan sát mà tôi đã sử dụng:
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
}
}
bất cứ ai có thể cho tôi biết vấn đề là gì?
Cũng có ai biết cách quan sát một mảng đối tượng nhanh không?
Tôi sẽ đánh giá cao bất kỳ trợ giúp nào.
Xin cảm ơn trước.
Cảm ơn, nhưng điều này không giải quyết được sự cố của tôi. Lỗi tương tự vẫn tồn tại trên dòng này: marketIndexList = Observable (marketIndexList) Tôi không thể làm cho mảng của tôi có thể quan sát được. – user2366997
Xin lỗi, tôi đã hiểu nhầm rằng bạn muốn sử dụng KVO mục tiêu-C từ Swift. Tôi đã chỉnh sửa câu trả lời của mình. –
Cảm ơn bạn đã liên kết trung bình, tôi thích sử dụng phương pháp đó để chúng tôi có thể khai thác nhanh nhất! – gbdavid