uwzględniając pewne problemy ze zrozumieniem Firebase z Swift 3.(setValue :) Nie można zapisać obiektu typu _SwiftValue w pictureURL. Można przechowywać tylko obiekty typu NSNumber, NSString, NSDictionary i NSArray
mam przerobiony moje obserwatora wyglądać tak:
currentUserFirebaseReference.observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in
let UID = snapshot.key
let dict = snapshot.value as! Dictionary<String,AnyObject>
let pictureURL = dict["pictureURL"] as! String
kiedyś po prostu zrobić:
observation..... in {
let picture = snapshot.value!["pictureURL"]
Ale teraz domyślam się, że musisz wyraźnie powiedzieć Firebase, że masz do czynienia ze Słownikiem?
Mój problem pojawia się, gdy próbuję ustawić wartość.
Dodaję ten pictureURL od góry do klasy Person, a potem robię:
let picURL = self.currentUserInfo.pictureURL // The picture from before
let info = ["pictureURL" : picURL, ....morestuff] as [String : Any] // Swift conversion added the String:Any bit. Assume this is correct?
ref.setValue(info)
i otrzymuję ten błąd:
Terminating app due to uncaught exception 'InvalidFirebaseData', reason: '(setValue:) Cannot store object of type _SwiftValue at pictureURL. Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.
Dlaczego tak się dzieje i jak czy mogę to naprawić?
edit:
Tak więc okazało się, dzieje się tak dopiero, gdy próbuje wyciągnąć informacje od klasy.
let data : Dictionary<String, Any> = ["Cats" : 3, "Dogs" : 9]
DataService.ds.REF_BASE.child("testing").setValue(data)
Powyższy kod działa.
class Dog {
var fur : String?
}
let dog = Dog()
dog.fur = "Brown"
let data : Dictionary<String, Any> = ["Cats" : 3, "Dogs" : 9, "DogFur" : dog.fur]
DataService.ds.REF_BASE.child("testing").setValue(data)
Ten kod ulega awarii i mówi, że nie mogę przypisać typu wartości swift.
Co jest 'ref'? –
Moje odwołanie do bazy firebase, w której chcę przechowywać informacje. Pełna treść to "DataService.ds.refPost.child (searchBar.text! .lowercased()). Child (" users ") child (self.currentUser!). SetValue (info). problemu, którego nie mogę sobie wyobrazić, ponieważ ten kod działał, zanim zostałem przeniesiony do Swift 3. – user6820041
Spróbuj zmienić '[String: Any]' na 'NSDictionary'. –