空のスペースで文字列を分割したいとしましょう。このコードスニペットは、Swift 1.xで正常に機能します。 Xcode 7 Beta 1のSwift 2では機能しません。
var str = "Hello Bob"
var foo = split(str) {$0 == " "}
次のコンパイラエラーが表示されます。
Cannot invoke 'split' with an argument list of type '(String, (_) -> _)
誰もこれを正しく呼び出す方法を知っていますか?
更新:これがXcode 7ベータ1用であるというメモを追加しました。
split
はCollectionType
の拡張のメソッドであり、Swift 2の時点で、String
は準拠していません。幸いなことに、String
を分割する方法は他にもあります。
componentsSeparatedByString
を使用します。
"ab cd".componentsSeparatedByString(" ") // ["ab", "cd"]
@dawgが指摘したように、これにはimport Foundation
が必要です。
split
でString
を呼び出す代わりに、String
の文字を使用できます。 characters
プロパティは、CollectionType
に準拠するString.CharacterView
を返します。
"???? ????????".characters.split(" ").map(String.init) // ["????", "????????"]
String
をCollectionType
に準拠させる:
extension String : CollectionType {}
"w,x,y,z".split(",") // ["w", "x", "y", "z"]
ただし、AppleはString
のCollectionType
への準拠を削除する決定を下したため、オプション1または2に固執する方が賢明です。
Swift 3では、それぞれオプション1および2で:
componentsSeparatedByString(:)
はcomponents(separatedBy:)
に名前が変更されました。split(:)
はsplit(separator:)
に名前が変更されました。let str = "Hello Bob"
let strSplitArray = str.split(separator: " ")
strSplitArray.first! // "Hello"
strSplitArray.last! // "Bob"
let str = "Hello Bob"
let strSplit = str.characters.split(" ")
String(strSplit.first!)
String(strSplit.last!)
Swift 3 componentsSeparatedByString
およびsplit
はこのように使用されます。
let splitArray = "Hello World".components(separatedBy: " ") // ["Hello", "World"]
分割
let splitArray = "Hello World".characters.split(separator: " ").map(String.init) // ["Hello", "World"]