web-dev-qa-db-ja.com

Swift 2でsplit関数を使用する

空のスペースで文字列を分割したいとしましょう。このコードスニペットは、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用であるというメモを追加しました。

70
Mallioch

splitCollectionTypeの拡張のメソッドであり、Swift 2の時点で、Stringは準拠していません。幸いなことに、Stringを分割する方法は他にもあります。

  1. componentsSeparatedByStringを使用します。

    "ab cd".componentsSeparatedByString(" ") // ["ab", "cd"]
    

    @dawgが指摘したように、これにはimport Foundationが必要です。

  2. splitStringを呼び出す代わりに、Stringの文字を使用できます。 charactersプロパティは、CollectionTypeに準拠するString.CharacterViewを返します。

    "???? ????????".characters.split(" ").map(String.init) // ["????", "????????"]
    
  3. StringCollectionTypeに準拠させる:

    extension String : CollectionType {}
    
    "w,x,y,z".split(",") // ["w", "x", "y", "z"]
    

    ただし、AppleはStringCollectionTypeへの準拠を削除する決定を下したため、オプション1または2に固執する方が賢明です。


Swift 3では、それぞれオプション1および2で:

  • componentsSeparatedByString(:)components(separatedBy:)に名前が変更されました。
  • split(:)split(separator:)に名前が変更されました。
126
ABakerSmith

スイフト4

let str = "Hello Bob"
let strSplitArray = str.split(separator: " ")
strSplitArray.first!    // "Hello"
strSplitArray.last!     // "Bob"

Xcode 7.1.1 with Swift 2.1

let str = "Hello Bob"
let strSplit = str.characters.split(" ")
String(strSplit.first!)
String(strSplit.last!)
18

Swift 3 componentsSeparatedByStringおよびsplitはこのように使用されます。

let splitArray = "Hello World".components(separatedBy: " ") // ["Hello", "World"]

分割

let splitArray = "Hello World".characters.split(separator: " ").map(String.init) // ["Hello", "World"]
9
Nirav D