我在我的Swift應用程序中使用AFNetworking和JSONModel的組合來與.NET WCF服務進行通信。一切工作,直到,直到地步,我提出,返回null
值Swift:這是怎麼進入我的[String:AnyObject]字典,我該如何擺脫它?
呼叫的問題從這裏開始:
if let resultsDict = responseObject as? Dictionary<String, AnyObject> {
results = AuthModel(dictionary: resultsDict, error: nil)
....
responseObject
從什麼WCF服務還給我分析(見this previous question如果你想要更多的背景)。我可以將它轉換爲Dictionary<String, AnyObject>
集合(實際上必須)並將其提供給AuthModel
,它是JSONModel
的子類,但是我發現如果集合包含.NET對象,則results
是nil
,這會混淆所有後來的代碼。而來自WCF服務的null
是.NET land中的空字符串。
如果我的resultsDict
對象上做一個print(resultsDict)
,我看到:
[x: <null>, y: 0, __type: Authenticate:#SomeLibrary.Models]
在這個例子中,x
是一個字符串,並y
是從C#/ NET代碼的int。
所以是的,當JSONModel中的一個值爲nil/null時,它是非常有意義的。然而,
- 我不知道如何在赫克一零/空值是在非可選
AnyObject
對象, - 我不知道如何清理/擺脫它。
我不能投responseObject
到Dictionary<String, AnyObject?>
,Xcode的抱怨
我不能遍歷它替換Dictionary
特定NUL/nill值,Xcode的抱怨(因爲你不能真正發揮作用與AnyObject
對象直接,我認爲)
我不能只創建第二個,消毒字典,因爲JSONModel顯然需要它是<String, AnyObject>
,我遇到了上述相同的問題。
如何擺脫我的字典中的null/nil對象?
OK,馬丁的r評論給了我,我需要拿出一些代碼,可以「乾淨」的字典,並插入空字符串那裏的NSNull /零/空值(實際上只是NSNull顯然)的提示。
if let resultsDict = responseObject as? Dictionary<String, AnyObject> {
var cleanedDict = Dictionary<String, AnyObject>()
for r in resultDict {
if r.1 as? NSObject == NSNull() {
cleanedDict[r.0] = ""
}
else {
cleanedDict[r.0] = r.1
}
}
results = AuthModel(dictionary: cleanedDict, error: nil)
....
所以我猜Xcode並沒有真的告訴我,我不能分配任何東西給字典,只是不是我這樣做。
我想現在的問題是 - 有沒有更好的方法來做到這一點?我這樣做的方式有點蠻力。
''是'NSNull()'單,這是描述用於表示來自JSON對象的「null」。 - 但是是不同的*從零/空。 –
2014-08-28 17:04:31
@MartinR確定你的評論加上操場破獲案件。我已經將它添加到問題中,直到/除非有人想出了一個很好的方法來做到這一點。如果不是,我會分出那部分並回答我自己的問題。 – 2014-08-28 19:26:15