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 beta 1 的。

4

3 回答 3

126

split是一种扩展方法CollectionType,从 Swift 2 开始,String不再符合该方法。幸运的是,还有其他方法可以拆分 a String

  1. 使用componentsSeparatedByString

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

    正如@dawg 所指出的,这需要你import Foundation.

  2. 您可以使用 的字符,而不是调用splita 。该属性返回 a ,它符合:StringStringcharactersString.CharacterViewCollectionType

    " ".characters.split(" ").map(String.init) // ["", ""]
    
  3. 使String符合CollectionType

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

    虽然,由于 Apple 决定取消String对 的一致性,CollectionType因此坚持使用选项一或二似乎更明智。


在 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 回答