2016-11-01 50 views
0

隨着火力地堡斯威夫特2版,我是能夠做到:寫可選的數據,以火力

something = ["someOptionalData": optionalData] 
ref.updateChildValues(something,......}) 

轉換爲斯威夫特3後&最新火力地堡,我得到這個錯誤:

Cannot store object of type _SwiftValue at optionalData. Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray. 

一些谷歌搜索後,人們說,firebase不接受可選類型。

所以我知道什麼是處理它比這其他更好的辦法:

if let unwrappedOptionalData = optionalData { 
     something = [ 
      "someOptionalData": unwrappedOptionalData 
     ] 
} else { 
     something = [ 
      "someOptionalData": true 
     ] 
} 
ref.updateChildValues(something,......) 
+1

你的代碼片段可以簡化爲'something = [「someOptionalData」:optionalData ?? true]' – dan

+0

@dan,但我不想存儲任何東西作爲「someOptionalData」當optionalData是零,我已經嘗試過'something = [「someOptionalData」:optionalData? NSNull()]'但xcode提示'nil合併運算符的左側?有非任意類型任何,所以右側永遠不會使用' – Alex

回答

0

嘗試: -

something = ["someOptionalData": optionalData!] 
ref.updateChildValues(something,......) 

鑑於您的optionalData的類型是: - 的NSNumberNSStringNSDictionary or NSArray

+1

但這是力量解開。就我而言,實際上有一些其他數據與可選數據一起寫入。我想要做的是,可選數據可以是零,如果它是零,那麼只有非可選項而非零可選項纔會寫入到firebase。這是可能的Firebase Swift 2. – Alex

+0

@Dravidian是否有可能在Swift 3中? – bibscy