在Swift中如何连接字符串?

211

如何在Swift中连接字符串?

Objective-C中我们这样做

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

但我想用Swift语言来实现这个。


2
Swift编译器无法很好地编译 + 符号。如果一个句子中有几个 +,则可能会失败。请使用 ()。 - kelalaka
21个回答

4

它被称为字符串插值(String Interpolation)。它是一种通过常量、变量、字面量和表达式创建新字符串的方式。 例如:

      let price = 3
      let staringValue = "The price of \(price) mangoes is equal to \(price*price) "

also

let string1 = "anil"
let string2 = "gupta"
let fullName = string1 + string2  // fullName is equal to "anilgupta"
or 
let fullName = "\(string1)\(string2)" // fullName is equal to "anilgupta"

它也意味着串联字符串值。

希望这可以帮助你。


4

我刚刚从Objective-C转换到Swift(4),我发现我经常使用以下内容:

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)

3

在Swift中,也可以使用stringByAppendingFormat。

var finalString : NSString = NSString(string: "Hello")
finalString = finalString.stringByAppendingFormat("%@", " World")
print(finalString) //Output:- Hello World
finalString = finalString.stringByAppendingFormat("%@", " Of People")
print(finalString) //Output:- Hello World Of People

3

Swift 5:

将字符串数组转换为单个字符串

let array = ["Ramana","Meharshi","Awareness","Oneness","Enlightnment","Nothing"]
let joined = array.joined(separator: ",")

3
使用以下方法打印组合字符串:
Println("\(string1)\(string2)")

或者String3存储了两个字符串的组合输出。
let strin3 = "\(string1)\(string2)"

3

Swift 4.2

您也可以使用扩展:

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap {
            if let unwrappedString = $0,
               unwrappedString.isEmpty {
                return nil
            } else {
                return $0
            }
        }
        .joined(separator: separator)
    }
}

用途:

label.text = [m.firstName, m.lastName].compactConcate(separator: " ")

结果:

"The Man"
"The"
"Man"

3

连接(Concatenation)指的是在Swift中组合字符串。字符串可以包含文本、整数甚至表情符号!有许多方法可以进行字符串连接,以下列举了一些:

相同的字符串

使用+=

如果我们想要添加到已有的字符串中,这种方法非常有用。为了使它起作用,我们的字符串应该是可变的或者可以被修改,因此需要将其声明为一个变量。例如:

var myClassmates = "John, Jane"
myClassmates += ", Mark" // add a new Classmate
// Result: "John, Jane, Mark"

不同的字符串

如果我们想要将不同的字符串合并在一起,例如:

let oldClassmates = "John, Jane" 
let newClassmate = "Mark"

我们可以使用以下任意一种方法:
1)使用+号
let myClassmates = oldClassmates + ", " + newClassmate
// Result: "John, Jane, Mark"

注意每个字符串可能是变量或常量,如果您只打算更改一次值,请将其声明为常量。
2)字符串插值
let myClassmates = "\(oldClassmates), \(newClassmate)"
// Result: "John, Jane, Mark"

3) 追加

let myClassmates = oldClassmates.appending(newClassmate)
// Result: "John, Jane, Mark"

更多信息请参考Swift Book中的字符串和字符部分。

更新:在Swift 5.1上进行了测试。


2

来自:Matt Neuburg的书《使用Swift进行iOS 13编程基础》:

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

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)

2
Swift拼接字符串
关于性能的几个词
iPhone 7(真实设备),iOS 14上的UI测试包,-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次,大约需要10秒
  • 插值最多到100,000次,大约需要10秒
  • NSString最多到10,000个,可能会出现内存问题

数量为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

关于将整数转换为字符串的注释:
源代码
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))
            }
        }
    }
}


1
你可以使用 SwiftString(https://github.com/amayne/SwiftString)来完成此操作。
"".join(["string1", "string2", "string3"]) // "string1string2string"
" ".join(["hello", "world"]) // "hello world"

免责声明:我编写了这个扩展。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接