如何将字符串拆分为多行,如下图?
var text:String = "This is some text
over multiple lines"
答案 0 :(得分:387)
Swift 4包含对multi-line string literals的支持。除了换行符,它们还可以包含未转义的引号。
var text = """
This is some text
over multiple lines
"""
较旧版本的Swift不允许您在多行中使用单个文字但您可以在多行中一起添加文字:
var text = "This is some text\n"
+ "over multiple lines\n"
答案 1 :(得分:30)
我在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!"
答案 2 :(得分:27)
这是我注意到的关于Swift的第一个令人失望的事情。几乎所有脚本语言都允许使用多行字符串。
C ++ 11添加了原始字符串文字,允许您define your own terminator
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"
答案 3 :(得分:16)
正如litso所指出的,在一个表达式中重复使用+
- 运算符可能会导致XCode Beta挂起(仅使用XCode 6 Beta 5进行检查):Xcode 6 Beta not compiling
现在,多线字符串的替代方法是使用字符串数组,reduce
使用+
:
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
或者,可以说更简单,使用join
:
var text = "".join(["This is some text ",
"over multiple lines"])
答案 4 :(得分:15)
从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!
"""
有关详细信息,请参阅what's new in Swift 4。
答案 5 :(得分:9)
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)
答案 6 :(得分:5)
<强>夫特:强>
@connor是正确的答案,但是如果你想在print语句中添加你要查找的行\n
和/或\r
,这些行称为Escape Sequences或Escaped Characters, this is a link to Apple documentation on the topic.
示例:
print("First line\nSecond Line\rThirdLine...")
答案 7 :(得分:4)
添加@Connor答案,还需要\ n。这是修改后的代码:
var text:String = "This is some text \n" +
"over multiple lines"
答案 8 :(得分:3)
以下示例描述了一个多行继续,使用括号作为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)
.
.
.
答案 9 :(得分:0)
您可以使用unicode equals输入或\n
并在您的字符串中实现它们。例如:\u{0085}
。
答案 10 :(得分:0)
另一种方法,如果你想使用带有一些预定义文本的字符串变量,
var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0
答案 11 :(得分:0)
样品
var yourString = "first line \n second line \n third line"
如果您找不到+运算符
答案 12 :(得分:0)
一种方法是将标签文本设置为attributedText并更新字符串变量以包含换行符的HTML(<br />
)。
例如:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
输出:
This is some text
over multiple lines
希望这有帮助!
答案 13 :(得分:0)
Here's a code snippet to split a string by n characters separated over lines:
//: 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
}
}
}
}
答案 14 :(得分:0)
我写的一个小扩展。
true
你可以这样使用它:
extension String {
init(swiftLintMultiline strings: String...) {
self = strings.reduce("", +)
}
}
答案 15 :(得分:-2)
我尝试了几种方法,但找到了更好的解决方案: 只需使用“文本视图”元素即可。它的文字会自动显示多行! 在此处找到:UITextField multiple lines