我在 Xcode6 Beta 上使用 Swift,当我在 func 定义“#”中使用时,就像在苹果的 Swift 编程指南中一样,我收到以下编译器错误:
参数中的无关“#”:“characterToFind”已经是关键字参数名称
// this code is a copy-paste code from apple's Swift language programing guide
func containsCharacter(#string: String, #characterToFind: Character) -> Bool {
for character in string {
if character == characterToFind {
return true
}
}
return false
}
这只是新 Xcode 的一个错误吗?
最佳答案
如果它是一个方法(类中的 func
),那么 #
是多余的,我想这就是编译器的意思。
在方法中,第一个参数名称仅假定为本地名称,而其他参数名称自动假定为外部名称和本地名称,就像您在它们前面编写了 #
一样。
所以,而不是
func containsCharacter(#string: String, #characterToFind: Character) -> Bool
你可以写
func containsCharacter(#string: String, characterToFind: Character) -> Bool
这将是完全相同的事情。
为了进一步证明这一点,我在操场上尝试了这个
func foo(#x: Int, #y: Int) { }
class foobar {
func foo(#x: Int, #y: Int)
func bar(#x: Int, y: Int)
}
这三个函数是相同的,但编译器在第二个
foo
上引发警告同样, 方法 中第一个之后的参数已经被自动视为外部名称。
关于ios - XCode6 Beta 中的编译器警告 - “Shorthand External Parameter Names”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24044419/