在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个回答

367

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

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之间的区别)。

注意

实际上,letvar与 NSStringNSMutableString非常不同,但这有助于类比。


让a = "Hello" 让b = "World"让first = a + ", " + b 不起作用,这才是正确的写法: 让first = "(a), (b)"。使用第一种方法会导致运行时错误。 - Joseph
1
@Joseph 对我来说很好用。http://i.imgur.com/T15s4Sp.png 谢谢你的负评。 - Fogmeister
@Fogmeister,你用的是哪个版本的xCode?在xCode 6.3 Beta上不起作用,也许在最新版本上可以。 - Joseph
@Joseph,你为什么要在我的正确答案基础上进行负面评价,而这个答案是基于旧版测试的?最新的beta版本是类似于beta 7(6.0而不是6.3,不存在这样的版本)。Xcode的最新版本是实际发布版本,已经发布了大约3周。你为什么还在使用beta版? - Fogmeister
有人对哪个更好有意见吗:“first”还是“second”? - alex da franca
显示剩余5条评论

67

以下是添加字符串的几种方式:

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

我认为这些方法都被列出来了。


不,你错过了 str.append(str2) :P - Rajneesh071

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

32
顺便提一下,这被称为字符串插值,而不是连接。 - dcastro

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

让ResultString等于"(StringA)(StringB)" - Aks
如果使用插值,就不需要加上 +,正如 Aks 所提到的那样。如果您喜欢使用 +,请删除插值。 - Raghu Teja

9

现在你可以在Swift中使用stringByAppendingString方法。

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

5

Swift 5

您可以使用appending API来实现。它会返回一个由给定的字符串附加到接收者后形成的新字符串。

API详细信息: 这里

用法:

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

结果:

Hello
Hello Namaste

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
是的,我在想将“+”转换为“addString()”有什么好处。如果我没记错的话,这种方式也会在对不可变变量使用时产生警告而不是编译器错误。否则,这会使正在发生的事情变得模糊不清,而且,在我看来,“+”没有什么比阅读更容易/更快的东西了。事实上,可能有一些我无法理解的原因,这就是我问为什么这种方式被“推荐”的原因。 - user3802077
当Xcode无法接受将可选字符串与普通字符串添加在一起时,我使用了这个。虽然现在它仍然不能直接实现这个功能,但是当你强制解包字符串时,它可以工作了。因此,这个扩展目前是无用的。在您阅读此消息并留下评论后,我将删除它。 - Esqarrouth
谢谢你的解释 :). 不确定哪个更好,但是通过将上下文添加到你的答案中,它会有价值,即使目前可能不像以前那么有用。 - user3802077

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