2016-09-14 61 views
5

有一些問題的理解火力與斯威夫特的存儲對象3.(setValue :)無法在pictureURL中存儲_SwiftValue類型的對象。只能類型的NSNumber,NSString的,NSDictionary中,和NSArray的

我重拍我的觀察,看起來像這樣:

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 

我用只是做

observation..... in { 

let picture = snapshot.value!["pictureURL"] 

但現在我想你必須明確告訴Firebase,你正在處理字典?

當我試圖設置一個值時,我的問題就出現了。

我從上面添加pictureURL一個Person類,後來我做:

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) 

,我得到這個錯誤:

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. 

這究竟是爲什麼,以及如何我可以修復它嗎?

編輯:

於是我發現了試圖從一個類上拉時的信息這只是發生。

let data : Dictionary<String, Any> = ["Cats" : 3, "Dogs" : 9] 

    DataService.ds.REF_BASE.child("testing").setValue(data) 

上述代碼有效。

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) 

該代碼崩潰並說我不能指定一個swiftvalue類型。

+0

什麼是'ref'? –

+0

我想要存儲信息的我的firebase參考。 完整的東西是「DataService.ds.refPost.child(searchBar.text!.lowercased())。child(」users「)。child(self.currentUser!)。setValue(info).ref不是我無法想象這個問題,因爲在我轉移到Swift 3之前,這些代碼都工作正常。 – user6820041

+0

嘗試將'[String:Any]'更改爲'NSDictionary'。 –

回答

3

看起來火力地堡是想我們是非常具體與您的數據類型與斯威夫特3.

我們需要向上伸直告訴斯威夫特我們要什麼樣的字典中有。在大多數情況下,它很可能會

Dictionary<String, Any> 

「任何」是斯威夫特3個新事物,我認爲。 AnyObject在這裏不起作用,因爲Swift重新定義了AnyObject,而Strings/Ints似乎不再是它們。

最後,似乎我們在你的字典裏絕對沒有可選項。也許可選是_SwiftValue?一旦我擺脫了選擇權,並保證每個價值都會在那裏開始爲我工作。

0
class Dog { 
     var fur : String? 
    } 

class Dog { 
     var fur : String! 
    } 

沒有自選

相關問題