我正在使用 AFNetworking 的组合和 JSONModel在我的 Swift 应用程序中与 .NET WCF 服务进行通信。一切正常,直到我调用返回 null
的电话为止值(value)观
问题从这里开始:
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 null
对象,然后 results
是nil
,这弄乱了后面的所有代码。和 null
来自 WCF 服务的是 .NET 领域中的空字符串。
如果我做 print(resultsDict)
在 resultsDict
上对象,我看到了这个:
[x: <null>, y: 0, __type: Authenticate:#SomeLibrary.Models]
在这个例子中,x
是一个字符串,y
是来自 c#/.NET 代码的 int。
是的,当其中一个值为 nil/null 时,来自 JSONModel 的代码不满意是完全合理的。然而,
- 我不确定 nil/null 值到底是怎么出现在非可选
AnyObject
中的对象,和 - 我不确定如何清理/清除它。
我不能投 responseObject
至 Dictionary<String, AnyObject?>
, Xcode 提示
我无法替换 Dictionary
中的特定 nul/nill 值通过迭代它,Xcode 提示(因为我认为你不能直接使用 AnyObject
对象)
我不能只创建第二个经过清理的字典,因为 JSONModel 显然需要它是 <String, AnyObject>
我遇到了与上述相同的问题。
我怎样才能从我的字典中删除这个 null/nil 对象?
好吧,Martin R 的评论给了我提示,我需要想出一些代码来“清理”字典并在有 NSNull/nil/null 值的地方插入空字符串(显然实际上只是 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
字典中的值由一个空字符串:
if let resultsDict = responseObject as? [String:AnyObject] {
var cleanedDict = resultsDict // a mutable copy
for (key, elem) in cleanedDict {
if elem is NSNull { // NSNull is a singleton, so this check is sufficient
cleanedDict[key] = ""
}
}
// ...
}
关于c# - Swift:这个 nil 是如何进入我的 [String: AnyObject] 字典的,我该如何摆脱它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25554108/