在Swift 2中使用split函数

Mal*_*och 70 swift2

假设我想用空格分割字符串.此代码段在Swift 1.x中正常工作.它在Xcode 7 Beta 1中的Swift 2中不起作用.

var str = "Hello Bob"
var foo = split(str) {$0 == " "}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误:

Cannot invoke 'split' with an argument list of type '(String, (_) -> _)
Run Code Online (Sandbox Code Playgroud)

有人知道怎么称呼这个吗?

更新:添加了一条说明,这是针对Xcode 7 beta 1的.

ABa*_*ith 126

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

  1. 用途componentsSeparatedByString:

    "ab cd".componentsSeparatedByString(" ") // ["ab", "cd"]
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    " ".characters.split(" ").map(String.init) // ["", ""]
    
    Run Code Online (Sandbox Code Playgroud)
  3. String遵守CollectionType:

    extension String : CollectionType {}
    
    "w,x,y,z".split(",") // ["w", "x", "y", "z"]
    
    Run Code Online (Sandbox Code Playgroud)

    虽然,因为Apple决定取消对它String的一致性CollectionType似乎更明智地坚持选择一两个.


在Swift 3中,分别在选项1和2中:

  • componentsSeparatedByString(:)已重命名为components(separatedBy:).
  • split(:)已重命名为split(separator:).

  • 值得注意的是,选项1和选项2并不相同.例如,如果要分隔的字符串/字符出现在字符串的开头,则选项1将返回一个在索引0中带有附加空字符串的数组,其中选项2不会. (2认同)

War*_*shi 18

斯威夫特4

let str = "Hello Bob"
let strSplitArray = str.split(separator: " ")
strSplitArray.first!    // "Hello"
strSplitArray.last!     // "Bob"
Run Code Online (Sandbox Code Playgroud)

Xcode 7.1.1与Swift 2.1

let str = "Hello Bob"
let strSplit = str.characters.split(" ")
String(strSplit.first!)
String(strSplit.last!)
Run Code Online (Sandbox Code Playgroud)


Nir*_*v D 9

在Swift 3中componentsSeparatedByStringsplit以这种方式使用.

let splitArray = "Hello World".components(separatedBy: " ") // ["Hello", "World"]
Run Code Online (Sandbox Code Playgroud)

分裂

let splitArray = "Hello World".characters.split(separator: " ").map(String.init) // ["Hello", "World"]
Run Code Online (Sandbox Code Playgroud)