我怎么能在多行分割字符串,如下面?
var text:String = "This is some text
over multiple lines"
我怎么能在多行分割字符串,如下面?
var text:String = "This is some text
over multiple lines"
当前回答
这是我注意到的斯威夫特的第一件令人失望的事情。几乎所有脚本语言都允许多行字符串。
c++ 11添加了原始字符串字面值,允许您定义自己的终止符
c#有它的@literals用于多行字符串。
即使是普通的C以及老式的c++和Objective-C也允许通过将多个文字相邻放置来进行连接,因此引号被折叠。当你这样做的时候,空格不算数,所以你可以把它们放在不同的行上(但需要添加你自己的换行符):
const char* text = "This is some text\n"
"over multiple lines";
由于swift不知道你已经把你的文本超过多行,我必须修复connor的样本,类似于我的C样本,显式地声明换行:
var text:String = "This is some text \n" +
"over multiple lines"
其他回答
我在String上使用了一个扩展来实现多行字符串,同时避免编译器挂起的错误。它还允许您指定分隔符,以便您可以像使用Python的join函数一样使用它
extension String {
init(sep:String, _ lines:String...){
self = ""
for (idx, item) in lines.enumerated() {
self += "\(item)"
if idx < lines.count-1 {
self += sep
}
}
}
init(_ lines:String...){
self = ""
for (idx, item) in lines.enumerated() {
self += "\(item)"
if idx < lines.count-1 {
self += "\n"
}
}
}
}
print(
String(
"Hello",
"World!"
)
)
"Hello
World!"
print(
String(sep:", ",
"Hello",
"World!"
)
)
"Hello, World!"
这是我注意到的斯威夫特的第一件令人失望的事情。几乎所有脚本语言都允许多行字符串。
c++ 11添加了原始字符串字面值,允许您定义自己的终止符
c#有它的@literals用于多行字符串。
即使是普通的C以及老式的c++和Objective-C也允许通过将多个文字相邻放置来进行连接,因此引号被折叠。当你这样做的时候,空格不算数,所以你可以把它们放在不同的行上(但需要添加你自己的换行符):
const char* text = "This is some text\n"
"over multiple lines";
由于swift不知道你已经把你的文本超过多行,我必须修复connor的样本,类似于我的C样本,显式地声明换行:
var text:String = "This is some text \n" +
"over multiple lines"
正如litso所指出的,在一个表达式中重复使用+-操作符会导致Xcode Beta挂起(刚刚用Xcode 6 Beta 5检查过):Xcode 6 Beta无法编译
目前,多行字符串的另一种替代方法是使用一个字符串数组,并将其压缩为+:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
或者,可以更简单地使用join:
var text = "".join(["This is some text ",
"over multiple lines"])
另一种方法是,如果你想使用带有预定义文本的字符串变量,
var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0
我尝试了几种方法,但找到了一个更好的解决方案: 只需使用“文本视图”元素。它的文本自动显示多行! 找到这里:UITextField多行