Swift 快速展开多个选项

Swift 快速展开多个选项,swift,optional,unwrap,Swift,Optional,Unwrap,我认为这是可能的,但似乎无法让它发挥作用。我肯定我只是在装傻。我正在尝试输出格式为的格式化地址 "one, two, three" 来自一组可选组件(一、二、三)。如果“2”为零,则输出为 “一,三” 我不知道你为什么需要这个,但是拿着它=) 我不知道你为什么需要这个,但是拿着它=) 如果您试图将非nil值打印为逗号分隔的列表,那么我认为@MartinR建议使用flatMap()是最好的: let one: String? let two: String? let three: String?

我认为这是可能的,但似乎无法让它发挥作用。我肯定我只是在装傻。我正在尝试输出格式为的格式化地址

"one, two, three"
来自一组可选组件(一、二、三)。如果“2”为零,则输出为

“一,三”


我不知道你为什么需要这个,但是拿着它=)


我不知道你为什么需要这个,但是拿着它=)


如果您试图将非
nil
值打印为逗号分隔的列表,那么我认为@MartinR建议使用
flatMap()
是最好的:

let one: String?
let two: String?
let three: String?

one = "one"
two = nil
three = "three"

let nonNils = [one, two, three].flatMap { $0 }
if !nonNils.isEmpty {
    print(nonNils.joinWithSeparator(","))
}
输出:


如果您试图将非
nil
值打印为逗号分隔的列表,那么我认为@MartinR建议使用
flatMap()
是最好的:

let one: String?
let two: String?
let three: String?

one = "one"
two = nil
three = "three"

let nonNils = [one, two, three].flatMap { $0 }
if !nonNils.isEmpty {
    print(nonNils.joinWithSeparator(","))
}
输出:


如果有!=零|二!=零|三!=考虑到你不是真的拆封而是只检查
nil
@Sulthan,所以nil
更具可读性。在我的解决方案中,字母更少,而且实际上没有人需要它=)有时是这样。记住递归函数。不过,Martin R的回答最正确、最优雅。字母少,代码行少永远不是一个好的衡量标准。代码复杂性和可读性是更好的衡量标准;虽然它的速度很小,但在这种情况下你永远也感觉不到,这就是我的意思。没有人认为减少行/字母本身就能提高代码质量。
if one!=零|二!=零|三!=考虑到你不是真的拆封而是只检查
nil
@Sulthan,所以nil
更具可读性。在我的解决方案中,字母更少,而且实际上没有人需要它=)有时是这样。记住递归函数。不过,Martin R的回答最正确、最优雅。字母少,代码行少永远不是一个好的衡量标准。代码复杂性和可读性是更好的衡量标准;虽然它的速度很小,但在这种情况下你永远也感觉不到,这就是我的意思。没有人认为减少行/字母本身可以提高代码质量。
打印(\(一??)、\(二??)、\(三??)”
。如果部分但不是全部变量为零,您希望得到什么输出<代码>如果有??两个??三个!=nil检查是否至少有一个为非nil,但未展开<代码>[1,2,3]。flatMap{$0}给出了一个非零变量的列表,未包装。我投票关闭,因为“不清楚你在问什么”,但如果问题被更新,我将很高兴撤销投票。@MartinR很抱歉出现任何混乱。我试图从一组可选组件(地址、城市、国家等)输出格式化的地址(以“地址、城市、国家”的形式)。如果城市为零,则输出为“地址、国家”“。看来你的平面图想法行得通though@Danny:我已经撤回了我的结束投票,但您应该更新问题本身以澄清您的问题(没有人阅读所有评论)。
print(\(一??)、\(二??)、\(三??)”
,也许吧。如果部分但并非全部变量为零,您希望得到什么输出<代码>如果有??两个??三个!=nil检查是否至少有一个为非nil,但未展开<代码>[1,2,3]。flatMap{$0}给出了一个非零变量的列表,未包装。我投票关闭,因为“不清楚你在问什么”,但如果问题被更新,我将很高兴撤销投票。@MartinR很抱歉出现任何混乱。我试图从一组可选组件(地址、城市、国家等)输出格式化的地址(以“地址、城市、国家”的形式)。如果城市为零,则输出为“地址、国家”“。看来你的平面图想法行得通though@Danny:我已经撤回了我的结束投票,但你应该更新问题本身以澄清你的问题(没有人阅读所有评论)。
let one: String?
let two: String?
let three: String?

one = "one"
two = nil
three = "three"

let nonNils = [one, two, three].flatMap { $0 }
if !nonNils.isEmpty {
    print(nonNils.joinWithSeparator(","))
}
one,three