Swift 中的多行语句

Multiline statement in Swift

我正在编写 Swift 教程,发现 Swift 处理多行语句的方式很奇怪。

首先,我定义了一些标准的扩展 String class:

extension String {
    func replace(target: String, withString: String) -> String {
        return self.stringByReplacingOccurrencesOfString(target, withString: withString)
    }

    func toLowercase() -> String {
        return self.lowercaseString
    }
}

这按预期工作:

let str = "HELLO WORLD"
let s1 = str.lowercaseString.replace("hello", withString: "goodbye") // -> goodbye world

这行不通:

let s2 = str
            .lowercaseString
            .replace("hello", withString: "goodbye")
// Error: could not find member 'lowercaseString'

如果我用函数调用替换对 lowercaseString 属性 的引用,它会再次起作用:

let s3 = str
            .toLowercase()
            .replace("hello", withString: "goodbye") // -> goodbye world

Swift 语言规范中是否有任何内容可以防止 属性 被拆分成自己的行?

代码位于 Swift Stub

swift 中不强制使用分号。而且我认为 swift 中多行语句的问题是因为可选的分号。

请注意 swift 不支持多行字符串。在这里查看:Swift - Split string over multiple lines

所以可能 swift 无法处理多行语句。我不确定这一点,这可能是原因之一,所以如果有人能就此问题提供帮助,我将不胜感激。

这感觉像是一个编译器错误,但它与您可以在 Swift 中定义前缀、中缀和后缀运算符这一事实有关(具有讽刺意味的是,但不是 . 运算符)。我不知道为什么它只会让你对 属性 而不是函数调用感到悲伤,但它是两件事的结合:

  • 白色space前后。属性的(点)运算符(仅)
  • 这种不断发展的语言的一些细微差别,它以不同于函数调用的方式处理属性(即使函数应该首先 class 类型)。

我会提交一个错误以查看结果,Swift pythonic 不应该这样做。也就是说,要解决它,您可以不破坏类型中的 属性,或者可以在 . 之前和之后添加白色 space .

let s2 = str.lowercaseString
    .replace("hello", withString: "goodbye")

let s3 = str
    . lowercaseString
    .replace("hello", withString: "goodbye")

这绝对是一个编译器错误。问题已在 Xcode 7 beta 3 中得到解决。