【Swift】split(separator: ) vs components(separatedBy:)

2つあるけど、どっちを使うか。

どっちから使っていくか。


"1 2 3".split(separator: " ")
// ["1", "2", "3"]

"1 2 3".components(separatedBy: " ")
// ["1", "2", "3"]

split のほうが短いし、分かりやすくね?

 

■ 最初と最後の区切り文字


" 1 2 3 ".split(separator: " ")
// ["1", "2", "3"]

" 1 2 3 ".components(separatedBy: " ")
// ["", "1", "2", "3", ""]

 

■ 連続する区切り文字


"1  2  3".split(separator: " ")
// ["1", "2", "3"]

"1  2  3".components(separatedBy: " ")
// ["1", "", "2", "", "3"]

 

■ 割れない場合


"123".split(separator: " ")
// ["123"]

"123".components(separatedBy: " ")
// ["123"]

"1 2 3".split(separator: "23")
// ["1 2 3"]

"1 2 3".components(separatedBy: "23")
// ["1 2 3"]

"1 2 3".split(separator: "  ")
// ["1 2 3"]

"1 2 3".components(separatedBy: "  ")
// ["1 2 3"]

 

■ 空文字で割る


"123".split(separator: "")
// ["1", "2", "3"]

"123".components(separatedBy: "") 
// ["123"]

"1 2 3".split(separator: "")
// ["1", " ", "2", " ", "3"]

"1 2 3".components(separatedBy: "") 
// ["1 2 3"]

" 1 2 3 ".split(separator: "")
// [" ", "1", " ", "2", " ", "3", " "]

" 1 2 3 ".components(separatedBy: "") 
// [" 1 2 3 "]

"  1  2  3  ".split(separator: "")
// [" ", " ", "1", " ", " ", "2", " ", " ", "3", " ", " "]

"  1  2  3  ".components(separatedBy: "")
// ["  1  2  3  "]

 

■ 空文字を分割


"".split(separator: " ")
// []

"".components(separatedBy: " ")
// [""]

"".split(separator: "23") 
// []

"".components(separatedBy: "23")
// [""]

"".split(separator: "  ")
// []

"".components(separatedBy: "  ")
// [""]

"".split(separator: "")
// []

"".components(separatedBy: "")
// [""]

 

■ それでも直感的に分かりづらいような


"123".split(separator: "123")
// []

"123".components(separatedBy: "123")
// ["", ""]

"123".split(separator: "23")
// ["1"]

"123".components(separatedBy: "23")
// ["1", ""]

"  1  2  3  ".split(separator: " ")
// ["1", "2", "3"]

"  1  2  3  ".components(separatedBy: " ")
// ["", "", "1", "", "2", "", "3", "", ""]

 

■ まとめ

それぞれ他にも引数はいろいろあるようですが、


components(separatedBy:)

のほうがはっきり明快で分かりやすいように思えますが。


"  1  2  3  "
  .split(separator: " ")   // ["1", "2", "3"]
  .joined(separator: " ")  // "1 2 3"

"  1  2  3  "
  .components(separatedBy: " ") // ["", "", "1", "", "2", "", "3", "", ""]
  .joined(separator: " ")       // "  1  2  3  "

将来的にどうなるのか。

👉 【Swift】なんとなくメソッド名が長い気がする hatena-bookmark
👉 swift - component(separatedBy:) versus .split(separator: ) - Stack Overflow hatena-bookmark