如何在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语言做这件事。
答案 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 )。
注意强>
实际上let
和var
与<{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)
答案 13 :(得分:1)
您还可以使用扩展名:
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)
您可以使用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
禁用下一个测试:
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))
}
}
}
}
答案 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上测试