swift component(separatedBy:) versus .split(separator: )

r1zk6ea1  于 2022-12-10  发布在  Swift
关注(0)|答案(3)|浏览(113)

在Swift 4中,苹果在String结构中引入了新的方法.split(separator:)。因此,用空格来拆分字符串,这对于例如。

let str = "My name is Sudhir"

str.components(separatedBy: " ")

//or 

str.split(separator: " ")
hgqdbh6s

hgqdbh6s1#

撇开性能不谈,split(separator:)components(separatedBy:)在处理空子序列的方式上有一个重要的区别。
如果您的输入包含尾随空格,它们将产生不同的结果

let str = "My name is Sudhir " // trailing space

    str.split(separator: " ")
    // ["My", "name", "is", "Sudhir"]

    str.components(separatedBy: " ")
    // ["My", "name", "is", "Sudhir", ""] ← Additional empty string

若要让两者产生相同的结果,请使用omittingEmptySubsequences:false参数(预设为true):

// To get the same behavior:
    str.split(separator: " ", omittingEmptySubsequences: false)
    // ["My", "name", "is", "Sudhir", ""]

详细信息:
https://developer.apple.com/documentation/swift/string/2894564-split

ki1q1bka

ki1q1bka2#

我用下面的代码做了示例测试。

var str = """
                One of those refinements is to the String API, which has been made a lot easier to use (while also gaining power) in Swift 4. In past versions of Swift, the String API was often brought up as an example of how Swift sometimes goes too far in favoring correctness over ease of use, with its cumbersome way of handling characters and substrings. This week, let’s take a look at how it is to work with strings in Swift 4, and how we can take advantage of the new, improved API in various situations. Sometimes we have longer, static strings in our apps or scripts that span multiple lines. Before Swift 4, we had to do something like inline \n across the string, add an appendOnNewLine() method through an extension on String or - in the case of scripting - make multiple print() calls to add newlines to a long output. For example, here is how TestDrive’s printHelp() function (which is used to print usage instructions for the script) looks like in Swift 3  One of those refinements is to the String API, which has been made a lot easier to use (while also gaining power) in Swift 4. In past versions of Swift, the String API was often brought up as an example of how Swift sometimes goes too far in favoring correctness over ease of use, with its cumbersome way of handling characters and substrings. This week, let’s take a look at how it is to work with strings in Swift 4, and how we can take advantage of the new, improved API in various situations. Sometimes we have longer, static strings in our apps or scripts that span multiple lines. Before Swift 4, we had to do something like inline \n across the string, add an appendOnNewLine() method through an extension on String or - in the case of scripting - make multiple print() calls to add newlines to a long output. For example, here is how TestDrive’s printHelp() function (which is used to print usage instructions for the script) looks like in Swift 3
          """

    var newString = String()

    for _ in 1..<9999 {
        newString.append(str)
    }

    var methodStart = Date()

 _  = newString.components(separatedBy: " ")
    print("Execution time Separated By: \(Date().timeIntervalSince(methodStart))")

    methodStart = Date()
    _ = newString.split(separator: " ")
    print("Execution time Split By: \(Date().timeIntervalSince(methodStart))")

我在iPhone6上运行上面的代码,下面是结果
Execution time Separated By: 8.27463299036026 Execution time Split By: 4.06880903244019

结论split(separator:)components(separatedBy:)快。

dgtucam1

dgtucam13#

Maybe a little late to answer:

When you play with them, they behave a little bit different:

str.components(separatedBy: "\n\n")

This call can give you some interesting results

str.split(separator: "\n\n")

This leads to an compile error as you must provide a single character.

相关问题