オプションの Swift 文字列を連結する適切な方法は? 質問する

オプションの Swift 文字列を連結する適切な方法は? 質問する
struct Person {
   var firstName: String?
   var lastName: String?
}

fullNameここで、名前または姓のみ(それがすべて利用可能な場合)を含む文字列、または名前と姓の両方がある場合は、間にスペースを含む文字列を作成します。

var fullName: String?
if let first = person.firstName {
    fullName = first
}
if let last = person.lastName {
    if fullName == nil {
        fullName = last
    } else {
        fullName += " " + last
    }
}

または

var fullName = ""
if let first = person.firstName {
    fullName = first
}
if let last = person.lastName {
    fullName += fullName.count > 0 ? (" " + last) : last
}

'sをネストするだけでいいのでしょうかif let? Nil の結合は適切に思えますが、このシナリオでそれをどのように適用するかがわかりません。オプションの文字列連結を過度に複雑な方法で実行しているような気がしてなりません。

ベストアンサー1

compactMap次と組み合わせるとうまく機能します.joined(separator:):

let f: String? = "jo"
let l: String? = "smith"

[f,l] // "jo smith"
  .compactMap { $0 }
  .joined(separator: " ")

以下の場合には間にスペースを入れませんnil:

let n: String? = nil

[f,n] // "jo"
  .compactMap { $0 }
  .joined(separator: " ")

おすすめ記事