Swift中的多行语句

时间:2015-06-04 02:12:57

标签: swift multiline

我正在研究Swift教程,发现Swift有一种奇怪的方式来处理多行语句。

首先,我为标准String类定义了一些扩展名:

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

这感觉就像编译器错误,但它涉及到你可以在Swift中定义前缀,中缀和后缀运算符这一事实(但不是。运算符,具有讽刺意味的是)。我不知道为什么它只会让你对财产感到悲伤而不是功能调用,但它是两件事的结合:

  • 之前和之后的空白。 (点)运营商的属性(仅限)
  • 这种不断增长的语言的一些细微差别,它以与函数调用不同的方式处理属性(即使函数应该是第一类类型)。

我会提交一个错误来查看它的结果,Swift不应该用pythonic这样做。也就是说,要解决它,你可以不破坏属性,也可以在.之前和之后添加空格。

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

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

答案 2 :(得分:0)

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

请注意,swift不支持多行字符串。点击此处:Swift - Split string over multiple lines

所以也许swift无法处理多行语句。我不确定这一点,这可能是其中一个原因所以如果有其他人可以帮助解决这个问题,我将不胜感激。