Swift – 将string分成多行
我怎么能分割一个string,如下面的多行?
var text:String = "This is some text over multiple lines"
请注意,从2017年起,您只需使用三重引号即可。
Swift 4支持多行string文字 。 除了换行符之外,还可以包含未转义的引号。
var text: String = """ This is some text over multiple lines """
老版本的Swift不允许你在多行上有一个单独的文字,但是你可以在多行上添加文字:
var text: String = "This is some text " + "over multiple lines"
我在string上使用扩展来实现多行string,同时避免编译器挂起错误。 它也允许你指定一个分隔符,所以你可以像Python的连接函数一样使用它
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!"
这是我注意到的关于Swift的第一个令人失望的事情。 几乎所有的脚本语言都允许使用多行string。
C ++ 11添加了原始string文字,允许您定义自己的终止符
C#有多行string的@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指出的那样,在一个expression式中重复使用+
-Operator可能会导致XCode Beta挂起(只需使用XCode 6 Beta 5进行检查): Xcode 6 Beta无法编译
现在多行string的替代方法是使用string数组并使用+
reduce
string:
var text = ["This is some text ", "over multiple lines"].reduce("", +)
或者,可以说更简单,使用join
:
var text = "".join(["This is some text ", "over multiple lines"])
迅速:
@connor是正确的答案,但如果你想在打印语句中添加行,你正在寻找的是\n
和/或\r
,这些被称为转义序列或转义字符, 这是一个链接到Apple文档话题。 。
例:
print("First line\nSecond Line\rThirdLine...")
多行string可以从Swift 4.0开始,但是有一些规则:
- 你需要用三个双引号开始和结束你的string,
"""
。 - 你的string内容应该从一行开始。
- 终止
"""
也应该开始在自己的路线。
除此之外,你很好走! 这是一个例子:
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中的新function 。
添加到@Connor的答案,还需要\ n。 这里是修改的代码:
var text:String = "This is some text \n" + "over multiple lines"
下面的例子描述了一个多行的延续,使用圆括号作为Xcode 6.2 Beta的Swift bug的一个简单的解决方法,它在那里抱怨expression式太复杂而无法在合理的时间内parsing,并且考虑把它分解成更小的件:
. . . 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) . . .
Swift 4已经通过给出多行string文字支持来解决这个问题。要开始string文字,添加三个双引号(“”“)并按回车键,按下回车键后,开始用任何variables写入string,换行符和双引号就像你会用记事本或任何文本编辑器写的一样。 要结束多行string,再次在新行中写入(“”“)。
见下面的例子
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)
另一种方法,如果你想使用一些预定义文本的stringvariables,
var textFieldData:String = "John" myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String myTextField.numberOfLines = 0
您可以使用unicode等于input或\n
并在您的string中执行它们。 例如: \u{0085}
。
样品
var yourString = "first line \n second line \n third line"
如果你没有find合适的+操作符
一种方法是将标签文本设置为“属性文本”,并更新stringvariables以包含换行符的HTML( <br />
)。
例如:
var text:String = "This is some text<br />over multiple lines" label.attributedText = text
输出:
This is some text over multiple lines
希望这可以帮助!
我尝试了几种方法,但发现了一个更好的解决scheme:只需使用“文本视图”元素。 这是文本自动显示多行! 在这里find: UITextField多行