Swift - 在多行上拆分字符串

时间:2014-06-06 21:56:56

标签: string swift

如何将字符串拆分为多行,如下图?

var text:String = "This is some text
                   over multiple lines"

16 个答案:

答案 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开始,可以使用多行字符串,但有一些规则:

  1. 您需要使用三个双引号"""开始和结束字符串。
  2. 您的字符串内容应该从它自己的行开始。
  3. 终止"""也应该自行开始。
  4. 除此之外,你还好!这是一个例子:

    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