如何在Swift中连接字符串?


188

如何在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语言做到这一点。


1
Swift编译器无法很好地进行编译。如果句子中有几个+,则可能会失败。使用()
kelalaka

Answers:


335

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

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上得到了多次回答(请参阅let和var之间的区别)。

注意

在现实中let,并var很大的不同,从NSStringNSMutableString,但它可以帮助类比。


@ Rajneesh071为什么会给出编译时错误?
Fogmeister 2014年

let创建一个常数。(有点像NSString)。设置后就无法更改其值。您仍然可以将其添加到其他东西并创建新变量。var创建一个变量。(类似于NSMutableString),因此您可以更改其值。但这已在SO上得到了多次回答。寻找difference between let and var
Fogmeister 2014年

let a =“ Hello” let b =“ World” let first = a +“,” + b不起作用,这是可行的,let first =“(a),(b)”。第一种方法会导致运行时错误
Joseph

1
@Joseph对我来说很好。i.imgur.com/T15s4Sp.png谢谢您的不赞成投票。
Fogmeister 2014年

@Fogmeister您正在使用什么版本的xCode?不适用于xCode 6.3 Beta,可能不适用于最新版本
Joseph

62

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

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

我想我都给他们起了名字。


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

25
附带说明,这称为字符串插值,而不是串联。
dcastro 2014年

13

这也将起作用:

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

11

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

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

您也可以尝试以下操作:-+关键字。

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

试试这个代码。


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

9

很简单:

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

let ResultString = "\(StringA)\(StringB)"
Aks 2015年

如果使用插值,则不需要+,如Aks所述。如果您更喜欢使用+,则删除插值。
Raghu Teja

9

您现在可以在Swift中使用stringByAppendingString

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

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

哪一部分?您熟悉扩展功能吗?
Esqarrouth,2015年

是的,我想知道在'addString()'中转换'+'会得到什么。如果我没有记错的话,如果在非可变变量上使用该方法,还会给您一个警告,而不是一个编译器错误。否则,这会混淆正在发生的事情,并且,IMO,没有什么比“ +”更容易/更快地阅读了。真相是有可能我看不见的原因,这就是为什么我问为什么“推荐”这种方式
user3802077

当xcode不接受在普通字符串中添加可选字符串时,我使用了此方法。它仍然不能直接这样做,但是现在当您强制解开字符串时它可以工作,因此此扩展名是无用的atm。在您阅读此内容后,我将其删除给我留下了评论
Esqarrouth 2015年

感谢您的移植:)。不知道哪种方法更好,但是通过将上下文添加到您的答案中,即使现在很难,它也会具有价值,它可能没有以前有用。
user3802077 2015年

4

它称为字符串插值。这是用常量,变量,文字和表达式创建新字符串的方法。举些例子:

      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"

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

希望对您有帮助。


3

使用以下命令打印组合的字符串

Println("\(string1)\(string2)")

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

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

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

2

斯威夫特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"

2

来自:马特·诺伊伯格(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)


1

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

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

0

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

例:

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

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


0

斯威夫特5

您可以使用appendingAPI 来实现。这将返回一个新字符串,该字符串是通过将给定字符串附加到接收者而得到的。

API详细信息:此处

用途

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

结果

Hello
Hello Namaste
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.