Sono nuovo in un linguaggio veloce e il mio problema riguarda l'utilizzo del pattern osservabile/osservatore in rapido.Come osservare un array di NSObjects in swift?
Voglio rendere il mio array visibile nella mia classe SocketManager in modo che possa essere osservato dalla classe UIViewController. Ho usato la classe Observable scritto da Andrew J Wagner, che ho avuto da questo link:
http://www.drewag.me/posts/swift-kvo-substitute-observable-variables
ho la matrice:
var marketIndexList: Array < marketindex> = []
che otterrà i suoi dati da un server. Questo elenco verrà aggiornato ogni volta che un nuovo dato viene ricevuto dal server. Dopo aver ottenuto i valori della mia Array dal server che voglio fare è di tipo classe Observable che viene realizzato tramite il link qui sopra:
marketIndexList = osservabili (marketIndexList)
Ma ho ottenuto questo errore:
'MarketIndex' non è identico a 'AnyObject'
MarketIndex è una classe di tipo NSObject che ha alcune proprietà di tipo String.
Questa è la classe Observable che ho usato:
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
}
}
qualcuno può dirmi qual è il problema?
Qualcuno sa anche un modo per osservare una serie di oggetti in rapido?
Apprezzerei qualsiasi aiuto.
Grazie in anticipo.
Grazie, ma questo non risolve il mio problema. Lo stesso errore esiste ancora su questa linea: marketIndexList = Observable (marketIndexList) Non riesco a rendere visibile il mio array. – user2366997
Scusa, ho avuto fraintendimenti che volevi usare l'Objective-C KVO di Swift. Ho modificato la mia risposta. –
Grazie per il collegamento medio, preferisco usare questo approccio in modo da poter sfruttare al massimo la velocità! – gbdavid