如何将字符串拆分为 [String] 而不是 [Substring]?

Mar*_*eIV 10 split swift swift4

考虑以下扩展:

extension Array where Element == String {
    func foo(){
    }
}
Run Code Online (Sandbox Code Playgroud)

并考虑我想要拆分的以下字符串,以便我可以使用扩展名...

let string = "This|is|a|test"
let words = string.split(separator: "|")
Run Code Online (Sandbox Code Playgroud)

问题是wordsa[Substring]和 not[String]所以我不能调用foo()它。

那么在 Swift 4 中,如何拆分字符串以返回 a[String]而不是 a [Substring]

Mar*_*n R 13

正如 Leo 上面所说,你可以使用 components(separatedBy:)

let string = "This|is|a|test"
let words = string.components(separatedBy: "|")
words.foo()
Run Code Online (Sandbox Code Playgroud)

相反,它返回一个[String].

如果您想坚持使用 split()(例如因为它有更多选项,例如省略空子序列),那么您必须通过将每个转换Substring 为 a来创建一个新数组String

let string = "This|is|a|test"
let words = string.split(separator: "|").map(String.init)
words.foo()
Run Code Online (Sandbox Code Playgroud)

或者 - 如果可能的话 - 使数组扩展方法更通用,以采用符合StringProtocol协议的参数,包括StringSubstring

extension Array where Element: StringProtocol {
    func foo(){
    }
}
Run Code Online (Sandbox Code Playgroud)