如何在Swift连接字符串?

在Objective-C中

NSString *string = @"Swift";
NSString *resultStr = [string stringByAppendingString:@" is a new Programming Language"];

or

NSString *resultStr=[NSString stringWithFormat:@"%@ is a new Programming Language",string];

但我想用swift语言来写。


当前回答

来自:Matt Neuburg书“iOS 13编程基础与Swift。”:

要组合(连接)两个字符串,最简单的方法是使用+运算符:

let s = "hello"
let s2 = " world"
let greeting = s + s2

这种方便的表示法是可能的,因为+操作符是重载的:当操作数是数字(数字加法)时它做一件事,当操作数是字符串(连接)时它做另一件事。 +操作符带有+=赋值快捷键;当然,左边的变量必须用var声明:

var s = "hello"
let s2 = " world"
s += s2

作为+=的替代方法,你可以调用append(_:)实例方法:

var s = "hello"
let s2 = " world"
s.append(s2)

连接字符串的另一种方法是使用joined(separator:)方法。你从一个要连接的字符串数组开始,并把要插入所有字符串之间的字符串交给它:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)

其他回答

var language = "Swift" 
var resultStr = "\(language) is a new programming language"

来自:Matt Neuburg书“iOS 13编程基础与Swift。”:

要组合(连接)两个字符串,最简单的方法是使用+运算符:

let s = "hello"
let s2 = " world"
let greeting = s + s2

这种方便的表示法是可能的,因为+操作符是重载的:当操作数是数字(数字加法)时它做一件事,当操作数是字符串(连接)时它做另一件事。 +操作符带有+=赋值快捷键;当然,左边的变量必须用var声明:

var s = "hello"
let s2 = " world"
s += s2

作为+=的替代方法,你可以调用append(_:)实例方法:

var s = "hello"
let s2 = " world"
s.append(s2)

连接字符串的另一种方法是使用joined(separator:)方法。你从一个要连接的字符串数组开始,并把要插入所有字符串之间的字符串交给它:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)

\ this被用来将一个字符串附加到另一个字符串。

var first = "Hi" 
var combineStr = "\(first) Start develop app for swift"

你也可以试试这个:- +关键字。

 var first = "Hi" 
 var combineStr = "+(first) Start develop app for swift"

试试这段代码。

快速连接字符串

关于性能的几句话

UI测试包在iPhone 7(真实设备),iOS 14, -Onone(调试,没有优化)[关于]

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

计数= 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

禁用下一个测试:

加上高达100_000 ~10s 插补可达100_000 ~10s NSString高达10_000 ->内存问题

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

*注意将Int转换为字符串

源代码

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))
            }
        }
    }
}

在Swift 5中,apple引入了使用#符号的原始字符串。

例子:

print(#"My name is "XXX" and I'm "28"."#)
let name = "XXX"
print(#"My name is \#(name)."#)

符号#必须在\后面。常规的\(name)将被解释为字符串中的字符。