Swift中可选字符串解包时是否有内联空值检查方法?
Swift 一行代码安全拼接可选姓名字段
问题原因
你的代码使用!强制解包可选值,当lastName、firstName或middleName任意一个为nil时,就会触发Fatal error: Unexpectedly found nil while unwrapping an Optional value运行时错误。
一行代码解决方案
可以通过过滤空值+分段拼接的方式实现安全的姓名拼接,同时避免多余的分隔符:
let fullName = [passenger.lastName, [passenger.firstName, passenger.middleName].compactMap { $0 }.joined(separator: " ")].filter { !$0.isEmpty }.joined(separator: ", ")
代码说明
[passenger.firstName, passenger.middleName].compactMap { $0 }:过滤掉firstName和middleName中的nil值,得到非空的名字数组.joined(separator: " "):将名字数组用空格拼接成完整的名(如果两个字段都为nil,则得到空字符串)- 外层数组
[passenger.lastName, ...]:将姓和处理后的名放入数组 .filter { !$0.isEmpty }:过滤掉数组中的空字符串(避免姓或名为空时出现多余的,分隔符).joined(separator: ", "):将剩余的非空部分用,拼接成最终的全名
示例效果
- 当
lastName = "Gates",firstName = "Darren",middleName = nil→ 结果为"Gates, Darren" - 当
lastName = "Gates",firstName = "Darren",middleName = "John"→ 结果为"Gates, Darren John" - 当
lastName = nil,firstName = "Darren",middleName = "John"→ 结果为"Darren John" - 当
lastName = "Gates",firstName = nil,middleName = nil→ 结果为"Gates"
内容的提问来源于stack exchange,提问作者Darren Gates
相关产品推荐
相关产品推荐

