70

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

4

3 に答える 3

126

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

  1. 使用componentsSeparatedByString:

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

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

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

    " ".characters.split(" ").map(String.init) // ["", ""]
    
  3. に適合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:)
于 2015-06-10T14:27:28.963 に答える
18

スイフト4

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

Xcode 7.1.1 と Swift 2.1

let str = "Hello Bob"
let strSplit = str.characters.split(" ")
String(strSplit.first!)
String(strSplit.last!)
于 2015-12-09T06:30:32.393 に答える
9

Swift 3 ではcomponentsSeparatedByStringsplitこのように使用されます。

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

スプリット

let splitArray = "Hello World".characters.split(separator: " ").map(String.init) // ["Hello", "World"]
于 2016-09-27T10:00:41.867 に答える