Swift允许在字典中使用nil
我有一个简单的函数,比如Swift允许在字典中使用nil,swift,dictionary,optional,Swift,Dictionary,Optional,我有一个简单的函数,比如 func foo(a: String?, b:String, c: String){ SomeClass.bla("param", props: [ "a": a, "b": b, "c": c, ]) } 如果a为nil,我只希望道具不包含a键,否则包含a及其字符串值(非可选)。在字典声明中有好的方法吗 我的代码当然不起作用,我得到了可选类型的值。。未展开错误对于a您可以使用三元运算符(?:)进行您提到的简单
func foo(a: String?, b:String, c: String){
SomeClass.bla("param", props: [
"a": a,
"b": b,
"c": c,
])
}
如果a
为nil
,我只希望道具不包含a
键,否则包含a
及其字符串值(非可选)。在字典声明中有好的方法吗
我的代码当然不起作用,我得到了可选类型的
值。。未展开
错误对于a
您可以使用三元运算符(?:)进行您提到的简单检查
func foo(a: String?){
SomeClass.bla("param", props: a == nil ? [:] : [ "a": a! ]);
}
由于您更新了您的问题,合适的解决方案是:
func foo(a: String?, b:String, c: String){
var props = [
"b": b,
"c": c,
]
if let aValue = a {
props["a"] = aValue
}
SomeClass.bla("param", props: props)
}
您可以使用三元运算符(?:)进行您提到的简单检查
func foo(a: String?){
SomeClass.bla("param", props: a == nil ? [:] : [ "a": a! ]);
}
由于您更新了您的问题,合适的解决方案是:
func foo(a: String?, b:String, c: String){
var props = [
"b": b,
"c": c,
]
if let aValue = a {
props["a"] = aValue
}
SomeClass.bla("param", props: props)
}
只需将字典创建为
var
,然后添加a
值。仅当下标逻辑不是nil
时,才会添加a
值
func foo(a:String?, b:String, c: String) {
var dict = ["b": b, "c": c]
dict["a"] = a
SomeClass.bla("param", props: dict)
}
非常感谢@Sulthan在下面的评论中提出的优雅建议。只需将字典创建为
var
,然后添加a
值。仅当下标逻辑不是nil
时,才会添加a
值
func foo(a:String?, b:String, c: String) {
var dict = ["b": b, "c": c]
dict["a"] = a
SomeClass.bla("param", props: dict)
}
非常感谢@Sulthan在下面的评论中提出的优雅建议。在哪里声明了
bar
?它是如何定义的?它的类型是什么?你可以创建一个类型为[String:String?]
的字典,所以你声明这个条的方式肯定有问题()这里的语法也有问题:条([“a”:a])
。。。那应该是干什么的?bar
是某种功能吗?您需要显示更多的代码,并准确指定哪一行显示错误。我稍微更正了这个问题,现在它更有意义了吗?bar
声明在哪里?它是如何定义的?它的类型是什么?你可以创建一个类型为[String:String?]
的字典,所以你声明这个条的方式肯定有问题()这里的语法也有问题:条([“a”:a])
。。。那应该是干什么的?bar
是某种功能吗?您需要显示更多的代码,并指定显示错误的行。我已稍微更正了问题,现在是否更有意义?我已编辑了问题,我的字典中有多个参数是的,我已更新了该情况的答案我已编辑了问题,我的字典中有多个参数是的,我已经更新了这种情况的答案,还有一件有趣的事,如果让a=a检查,你不需要这个。这只是nil
存在问题的文本值dict[“a”]=nil
很好用。@Sulthan:对不起,我不明白。var dict=[“b”:b,“c”:c]
dict[“a”]=a
。够了。如果让a=a
条件,则不需要。@Sulthan:如果SomeClass.bla的props
参数定义为[String:String]
,则不会编译,因为您正在将字符串?
添加为值。已在上面发布var dict:[String:String]=[“b”:b,“c”:c]
dict[“a”]=a
是所需的全部代码。有趣的是,如果让a=a
检查,您不需要。这只是nil
存在问题的文本值dict[“a”]=nil
很好用。@Sulthan:对不起,我不明白。var dict=[“b”:b,“c”:c]
dict[“a”]=a
。够了。如果让a=a
条件,则不需要。@Sulthan:如果SomeClass.bla的props
参数定义为[String:String]
,则不会编译,因为您正在将字符串?
添加为值。已在上面发布<代码>变量dict:[String:String]=[“b”:b,“c”:c]
dict[“a”]=a
是所需的全部代码。