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 中得到解决。
我正在编写 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 中得到解决。