如何将字符串分割成多行,如下所示?
var text:String = "This is some text
over multiple lines"
如何将字符串分割成多行,如下所示?
var text:String = "This is some text
over multiple lines"
Answers:
Swift 4包括对多行字符串文字的支持。除换行符外,它们还可以包含未转义的引号。
var text = """
This is some text
over multiple lines
"""
较早版本的Swift不允许您在多行上使用单个文字,但可以在多行上将文字添加在一起:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
字符。例如,在REPL中:println("foo\n" + "bar")
打印foo
并bar
在单独的行上。
我使用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!"
enumerate(lines)
现在都是lines.enumerate()
joinWithSeparator
相同的吗?["Hello", "World!"].joinWithSeparator(", ")
这是我注意到的关于Swift的第一个令人失望的事情。几乎所有的脚本语言都允许多行字符串。
C ++ 11添加了原始字符串文字,使您可以定义自己的终止符
C#具有@literals用于多行字符串。
即使是普通C语言,也因此是老式C ++和Objective-C,只要将多个文字放在相邻位置就可以实现合并,因此引号会被折叠。当您这样做时,空格不计算在内,因此您可以将它们放在不同的行上(但需要添加自己的换行符):
const char* text = "This is some text\n"
"over multiple lines";
由于swift不知道您已将文本放在多行上,因此我不得不像我的C示例一样修复connor的示例,明确指出换行符:
var text:String = "This is some text \n" +
"over multiple lines"
从Swift 4.0开始,多行字符串是可能的,但是有一些规则:
"""
。"""
也应以自己的方式开始。除此之外,您还不错!这是一个例子:
let longString = """
When you write a string that spans multiple
lines make sure you start its content on a
line all of its own, and end it with three
quotes also on a line of their own.
Multi-line strings also let you write "quote marks"
freely inside your strings, which is great!
"""
有关更多信息,请参见Swift 4中的新增功能。
正如+
litso 指出的,在一个表达式中重复使用-Operator会导致XCode Beta挂起(仅通过XCode 6 Beta 5进行检查): Xcode 6 Beta无法编译
目前,多行字符串的一种替代方法是使用字符串数组,并将reduce
其与+
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
或者,可以说更简单一些join
:
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4通过提供对多行字符串文字的支持解决了这个问题。要开始字符串文字,请添加三个双引号(“”“)并按回车键,按回车键后,开始使用任何变量,换行符和双引号编写字符串就像您在记事本或任何文本编辑器中编写的一样。要结束多行字符串文字,请再次在新行中写入(“”“)。
见下面的例子
let multiLineStringLiteral = """
This is one of the best feature add in Swift 4
It let’s you write “Double Quotes” without any escaping
and new lines without need of “\n”
"""
print(multiLineStringLiteral)
迅速:
@connor是正确的答案,但是如果您想在打印语句中添加所需的行\n
和/或\r
,则将它们称为“转义序列”或“转义字符”,这是该主题的Apple文档的链接。。
例:
print("First line\nSecond Line\rThirdLine...")
除了@Connor答案,还需要\ n。这是修改后的代码:
var text:String = "This is some text \n" +
"over multiple lines"
以下示例描述了多行延续,使用括号作为Xcode 6.2 Beta以来的Swift错误的简单解决方法,其中抱怨表达式过于复杂,无法在合理的时间内解决,并考虑将其分解为更小的代码件:
.
.
.
return String(format:"\n" +
(" part1: %d\n" +
" part2: %d\n" +
" part3: \"%@\"\n" +
" part4: \"%@\"\n" +
" part5: \"%@\"\n" +
" part6: \"%@\"\n") +
(" part7: \"%@\"\n" +
" part8: \"%@\"\n" +
" part9: \"%@\"\n" +
" part10: \"%@\"\n" +
" part12: \"%@\"\n") +
" part13: %f\n" +
" part14: %f\n\n",
part1, part2, part3, part4, part5, part6, part7, part8,
part9, part10, part11, part12, part13, part14)
.
.
.
样品
var yourString = "first line \n second line \n third line"
如果找不到适合的+运算符
一种方法是将标签文本设置为attributedText并更新字符串变量以包括用于换行符的HTML(<br />
)。
例如:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
输出:
This is some text
over multiple lines
希望这可以帮助!
String
值(文本)分配给NSAttributedString?
属性(label.attributedText)。
这是一个代码片段,用于将字符串分隔为n个字符,并以行分隔:
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let str = String(charsPerLine: 5, "Hello World!")
print(str) // "Hello\n Worl\nd!\n"
}
}
extension String {
init(charsPerLine:Int, _ str:String){
self = ""
var idx = 0
for char in str {
self += "\(char)"
idx = idx + 1
if idx == charsPerLine {
self += "\n"
idx = 0
}
}
}
}
我尝试了几种方法,但是找到了一个更好的解决方案:只需使用“文本视图”元素。它的文本自动显示多行!在这里找到:UITextField多行