yat*_*dam 61 null dictionary optional swift
我已经在我的应用程序中向我的服务器发出了请求.并发布类似这样的数据.服务器端正在等待所有参数,即使它们是零.但我无法将nil值添加到字典中.
var postDict = Dictionary<String,AnyObject>
postDict[pass]=123
postDict[name]="ali"
postDict[surname]=nil // dictionary still has only pass and name variables.
Run Code Online (Sandbox Code Playgroud)
有没有办法将nil值添加到字典?
new*_*cct 102
如何为
nil
Swift Dictionary 增加价值?
基本上与向字典添加任何其他值的方式相同.您首先需要一个具有可以保存您的值的值类型的字典.类型AnyObject
不能有值nil
.所以类型字典[String : AnyObject]
不能有价值nil
.
如果您的字典值类型是可选类型[String : AnyObject?]
,那么它可以保存nil
值.例如,
let x : [String : AnyObject?] = ["foo" : nil]
Run Code Online (Sandbox Code Playgroud)
如果你想使用下标语法来分配一个元素,那就有点棘手了.请注意,类型的下标[K:V]
具有类型V?
.当你把它拿出来时,可选的是指示是否有该条目的条目,如果是,则表示该值; 当你把它放入时,它允许你设置一个值或删除条目(通过分配nil
).
这意味着对于我们的类型字典[String : AnyObject?]
,下标有类型AnyObject??
.同样,当您将值放入下标时,"outer"可选允许您设置值或删除条目.如果我们只是写
x["foo"] = nil
Run Code Online (Sandbox Code Playgroud)
编译器推断nil
为类型AnyObject??
,外部可选,这意味着删除键的条目"foo"
.
为了将key 的值设置为值,我们需要传入一个非外部可选项,包含一个内部可选(类型)值.为了做到这一点,我们可以做到"foo"
AnyObject?
nil
nil
AnyObject?
nil
let v : AnyObject? = nil
x["foo"] = v
Run Code Online (Sandbox Code Playgroud)
要么
x["foo"] = nil as AnyObject?
Run Code Online (Sandbox Code Playgroud)
凡是表明我们拥有nil
的AnyObject?
,而不是AnyObject??
.
小智 25
您可以使用以下updateValue
方法:
postDict.updateValue(nil, forKey: surname)
Run Code Online (Sandbox Code Playgroud)
rin*_*aro 21
如此处所述,nil
在字典中设置键意味着删除元素本身.
例如,如果您想null
转换JSON
为,则可以使用NSNull()
var postDict = Dictionary<String,AnyObject>()
postDict["pass"]=123
postDict["name"]="ali"
postDict["surname"]=NSNull()
let jsonData = NSJSONSerialization.dataWithJSONObject(postDict, options: NSJSONWritingOptions.allZeros, error: nil)!
let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)!
// -> {"pass":123,"surname":null,"name":"ali"}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26167 次 |
最近记录: |