我正在研究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。
答案 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无法处理多行语句。我不确定这一点,这可能是其中一个原因所以如果有其他人可以帮助解决这个问题,我将不胜感激。