如何在 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 语言来做这件事。
您可以通过多种方式连接字符串:
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
与 NSString
和 NSMutableString
非常不同,但它有助于类比。
您可以通过以下方式添加字符串:
str += ""
str = str + ""
str = str + str2
str = "" + ""
str = "\(变量)"
str = str + "\(变量)"
我想我都给他们起了名字。
var language = "Swift"
var resultStr = "\(language) is a new programming language"
这也可以:
var string = "swift"
var resultStr = string + " is a new Programming Language"
\ 这用于将一个字符串附加到另一个字符串。
var first = "Hi"
var combineStr = "\(first) Start develop app for swift"
你也可以试试这个:- + 关键字。
var first = "Hi"
var combineStr = "+(first) Start develop app for swift"
试试这个代码。
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
很简单:
let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
let ResultString = "\(StringA)\(StringB)"
您现在可以在 Swift 中使用 stringByAppendingString。
var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
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
它被称为字符串插值。这是用常量、变量、文字和表达式创建新字符串的方法。举些例子:
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"
它也意味着连接字符串值。
希望这对您有所帮助。
我刚从 Objective-C 切换到 Swift (4),我发现我经常使用:
let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)
使用打印组合字符串
Println("\(string1)\(string2)")
或 String3 存储 2 个字符串组合的输出
let strin3 = "\(string1)\(string2)"
也可以在 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
斯威夫特 5
您可以使用 appending
API 来实现它。这将返回一个通过将给定字符串附加到接收器而生成的新字符串。
API 详细信息:here
利用:
var text = "Hello"
text = text.appending(" Namaste")
结果:
Hello
Hello Namaste
串联是指 Swift 中字符串的组合。字符串可能包含文本、整数甚至表情符号!字符串连接有很多方法。让我列举一些:
相同的字符串
使用 +=
如果我们想添加到已经存在的字符串,这很有用。为此,我们的 String 应该是可变的或可以修改的,从而将其声明为变量。例如:
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 上测试
斯威夫特 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"
来自:Matt Neuburg 书籍“iOS 13 Programming Fundamentals with 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)
您可以使用 SwiftString (https://github.com/amayne/SwiftString) 来执行此操作。
"".join(["string1", "string2", "string3"]) // "string1string2string"
" ".join(["hello", "world"]) // "hello world"
免责声明:我写了这个扩展
关于性能的几句话
带有 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))
}
}
}
}
斯威夫特 5:
将字符串数组转换为单个字符串
let array = ["Ramana","Meharshi","Awareness","Oneness","Enlightnment","Nothing"]
let joined = array.joined(separator: ",")
在 Swift 5 中,苹果引入了使用 # 符号的原始字符串。
例子:
print(#"My name is "XXX" and I'm "28"."#)
let name = "XXX"
print(#"My name is \#(name)."#)
符号 # 在 \ 之后是必需的。常规 \(name) 将被解释为字符串中的字符。
let
创建一个常量。 (有点像 NSString)。一旦你设置了它,你就不能改变它的值。不过,您仍然可以将其添加到其他事物并创建新变量。var
创建一个变量。 (有点像 NSMutableString)所以你可以改变它的值。但这已在 SO 上多次回答。寻找difference between let and var