XCode6 Beta中的编译器警告 - “速记外部参数名称”

时间:2014-06-04 18:00:52

标签: ios swift xcode6

我在Xcode6 Beta上使用Swift,当我在func定义'#'中使用时,就像在Apple的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的一个错误吗?

1 个答案:

答案 0 :(得分:13)

如果它是一个方法(类中的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

上发出警告
  

外来'#' in参数:' characterToFind'已经是关键字参数名称

同样,方法中第一个之后的参数已自动被视为外部名称。