Swift - 在多行上分割字符串

  发布于 2023-01-11 11:27

我怎么能把一个字符串分成多行如下?

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

Connor.. 405

Swift 4包括对多行字符串文字的支持.除了换行符,它们还可以包含未转义的引号.

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

较旧版本的Swift不允许您在多行上使用单个文字,但您可以在多行中一起添加文字:

var text = "This is some text\n"
         + "over multiple lines\n"

不要忘记在结束引号和+之间添加一个空格,否则你会得到一个"'+'不是后缀一元运算符"错误 (8认同)

这种方法的问题是你可以很容易地在Swift中找到太多"继续"的行(从Xcode 6.2 beta开始),它抱怨表达"太复杂而无法在合理的时间内解决"并考虑破坏它归结为更简单的表达方式.这很丑陋,但很容易实现,只需用parens包裹. (2认同)

对于使用字符串的枚举案例值不起作用:( (2认同)


mcornell.. 31

我在String上使用了一个扩展来实现多行字符串,同时避免编译器挂起bug.它还允许您指定分隔符,以便您可以像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 2的人来说,`enumerate(lines)`现在是`lines.enumerate()` (2认同)

@mcornell这很好,但不是`joinWithSeparator`基本上做同样的事情?`["Hello","World!"].joinWithSeparator(",")` (2认同)


Andy Dent.. 27

这是我注意到的关于Swift的第一个令人失望的事情.几乎所有脚本语言都允许使用多行字符串.

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"

我很确定这方面有局限性.我试过将一个字符串分成13行(这是一个多行信息文本).它不仅没有完成编译,而且还让我的Mac瘫痪了.正如我所说,我不能断然说这是一个问题,但要注意,影响非常严重. (4认同)


小智.. 16

正如+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"])


TwoStraws.. 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!
"""

有关更多信息,请参阅Swift 4中的新增功能.

7 个回答
  • Swift 4包括对多行字符串文字的支持.除了换行符,它们还可以包含未转义的引号.

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

    较旧版本的Swift不允许您在多行上使用单个文字,但您可以在多行中一起添加文字:

    var text = "This is some text\n"
             + "over multiple lines\n"
    

    2023-01-11 11:28 回答
  • 这是我注意到的关于Swift的第一个令人失望的事情.几乎所有脚本语言都允许使用多行字符串.

    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"
    

    2023-01-11 11:28 回答
  • 我在String上使用了一个扩展来实现多行字符串,同时避免编译器挂起bug.它还允许您指定分隔符,以便您可以像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!"
    

    2023-01-11 11:28 回答
  • 迅速:

    @connor是正确的答案,但是如果你想在print语句中添加你正在寻找的行\n和/或\r,这些被称为Escape Sequences或Escaped Characters,这是关于该主题的Apple文档的链接..

    例:

    print("First line\nSecond Line\rThirdLine...")
    

    2023-01-11 11:30 回答
  • 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)
    

    2023-01-11 11:30 回答
  • 从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中的新增功能.

    2023-01-11 11:30 回答
  • 正如+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"])
    

    2023-01-11 11:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有