How do I concatenate strings in Swift?

前端 未结 20 1855
梦毁少年i
梦毁少年i 2020-11-28 03:04

How to concatenate string in Swift?

In Objective-C we do like

NSString *string = @\"Swift\";
NSString *resultStr = [string stringByAppen         


        
20条回答
  •  误落风尘
    2020-11-28 03:47

    Several words about performance

    UI Testing Bundle on iPhone 7(real device) with iOS 14

    var result = ""
    for i in 0...count {
        
    }
    
    

    Count = 5_000

    //Append
    result.append(String(i))                         //0.007s 39.322kB
    
    //Plus Equal
    result += String(i)                              //0.006s 19.661kB
    
    //Plus
    result = result + String(i)                      //0.130s 36.045kB
    
    //Interpolation
    result = "\(result)\(i)"                         //0.164s 16.384kB
    
    //NSString
    result = NSString(format: "%@%i", result, i)     //0.354s 108.142kB
    
    //NSMutableString
    result.append(String(i))                         //0.008s 19.661kB
    

    Disable next tests:

    • Plus up to 100_000 ~10s
    • interpolation up to 100_000 ~10s
    • NSString up to 10_000 -> memory issues

    Count = 1_000_000

    //Append
    result.append(String(i))                         //0.566s 5894.979kB
    
    //Plus Equal
    result += String(i)                              //0.570s 5894.979kB
    
    //NSMutableString
    result.append(String(i))                         //0.751s 5891.694kB
    

    *Note about Convert Int to String

    Source code

    import XCTest
    
    class StringTests: XCTestCase {
    
        let count = 1_000_000
        
        let metrics: [XCTMetric] = [
            XCTClockMetric(),
            XCTMemoryMetric()
        ]
        
        let measureOptions = XCTMeasureOptions.default
    
        
        override func setUp() {
            measureOptions.iterationCount = 5
        }
        
        func testAppend() {
            var result = ""
            measure(metrics: metrics, options: measureOptions) {
                for i in 0...count {
                    result.append(String(i))
                }
            }
    
        }
        
        func testPlusEqual() {
            var result = ""
            measure(metrics: metrics, options: measureOptions) {
                for i in 0...count {
                    result += String(i)
                }
            }
        }
        
        func testPlus() {
            var result = ""
            measure(metrics: metrics, options: measureOptions) {
                for i in 0...count {
                    result = result + String(i)
                }
            }
        }
        
        func testInterpolation() {
            var result = ""
            measure(metrics: metrics, options: measureOptions) {
                for i in 0...count {
                    result = "\(result)\(i)"
                }
            }
        }
        
        //Up to 10_000
        func testNSString() {
            var result: NSString =  ""
            measure(metrics: metrics, options: measureOptions) {
                for i in 0...count {
                    result = NSString(format: "%@%i", result, i)
                }
            }
        }
        
        func testNSMutableString() {
            let result = NSMutableString()
            measure(metrics: metrics, options: measureOptions) {
                for i in 0...count {
                    result.append(String(i))
                }
            }
        }
    
    }
    
    

提交回复
热议问题