如何在Swift中连接字符串?

时间:2014-06-04 09:49:15

标签: string swift concat string-concatenation

如何在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语言做这件事。

20 个答案:

答案 0 :(得分:311)

您可以通过多种方式连接字符串:

let a = "Hello"
let b = "World"

let first = a + ", " + b
let second = "\(a), \(b)"

你也可以这样做:

var c = "Hello"
c += ", World"

我确定还有更多方法。

位描述

let创建一个常量。 (有点像NSString)。设置后,您无法更改其值。您仍然可以将其添加到其他内容并创建新变量。

var创建一个变量。 (有点像NSMutableString)所以你可以改变它的值。但是Stack Overflow已经多次回答了这个问题(参见 difference between let and var )。

注意

实际上letvar与<{1}}和NSString非常不同,但这有助于比喻。

答案 1 :(得分:56)

您可以通过以下方式添加字符串:

  • str += ""
  • str = str + ""
  • str = str + str2
  • str = "" + ""
  • str = "\(variable)"
  • str = str + "\(variable)"

我想我已将它们全部命名。

答案 2 :(得分:28)

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

答案 3 :(得分:12)

这也可以:

var string = "swift"
var resultStr = string + " is a new Programming Language"

答案 4 :(得分:11)

\这用于将一个字符串附加到另一个字符串。

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

你也可以试试这个: - + keyword。

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

试试这段代码。

答案 5 :(得分:10)

let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"

答案 6 :(得分:9)

非常简单:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")

答案 7 :(得分:9)

您现在可以在Swift中使用 stringByAppendingString

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")

答案 8 :(得分:5)

Xcode不接受使用普通字符串添加的可选字符串。我写了这个扩展来解决这个问题:

extension String {
    mutating func addString(str: String) {
        self = self + str
    }
}

然后你可以这样称呼它:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1.addString(str2)
println(str1) //hi my name is

但是你现在也可以这样做:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2

答案 9 :(得分:4)

它被称为String Interpolation。 它是使用CONSTANTS,VARIABLE,LITERALS和EXPRESSIONS创建NEW字符串的方法。  例如:

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

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"

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

希望这会对你有所帮助。

答案 10 :(得分: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

答案 11 :(得分:3)

使用

打印组合字符串
Println("\(string1)\(string2)")

或String3存储2个字符串组合的输出

let strin3 = "\(string1)\(string2)"

答案 12 :(得分:2)

您可以使用SwiftString(https://github.com/amayne/SwiftString)来执行此操作。

[^0-9]

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

答案 13 :(得分:1)

Swift 4.2

您还可以使用扩展名:

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap { $0 }.filter { !$0.isEmpty }.joined(separator: separator)
    }
}

使用:

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

结果:

"The Man"
"The"
"Man"

答案 14 :(得分:1)

来自: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)

答案 15 :(得分:1)

雨燕5

您可以使用appending API来实现。这会返回通过将给定字符串附加到接收方而产生的新字符串。

API详细信息:here

使用

var text = "Hello"
text = text.appending(" Namaste")

结果

Hello
Hello Namaste

答案 16 :(得分:0)

我刚从Objective-C切换到Swift(4),我发现我经常使用:

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

答案 17 :(得分:0)

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

示例:

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

符号#。常规\(名称)将被解释为字符串中的字符。

答案 18 :(得分:0)

关于性能的几句话

具有iOS 14的iPhone 7(真实设备)上的UI测试包

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->内存问题

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

*关于Convert Int to String

的注释

源代码

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

}

答案 19 :(得分:0)

串联是指Swift中字符串的组合。字符串可能包含文本,整数甚至表情符号!字符串连接有很多方法。让我列举一些:

相同的字符串

使用+ =

如果我们要添加到已经存在的String中,这很有用。为此,我们的String应该是可变的或可以修改的,因此将其声明为Variable。例如:

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上测试