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

Posted

技术标签:

【中文标题】XCode6 Beta 中的编译器警告 - “速记外部参数名称”【英文标题】:Compiler Warning in XCode6 Beta - “Shorthand External Parameter Names” 【发布时间】:2014-06-04 18:00:52 【问题描述】:

我在 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 的一个错误吗?

【问题讨论】:

您能否参考文档中指定使用 # 的位置? 它似乎对函数工作正常,但我在方法中得到与你相同的结果。第 344 页 我也有同样的问题。我想这是一个错误,因为我的代码似乎完全符合这本书 @68cherries 在“速记外部参数名称”标题中。 类中方法的外部名称规则与一般函数的外部名称规则不同。 【参考方案1】:

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

参数中的多余“#”:“characterToFind”已经是关键字参数名称

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

【讨论】:

以上是关于XCode6 Beta 中的编译器警告 - “速记外部参数名称”的主要内容,如果未能解决你的问题,请参考以下文章

将 xcode 6 beta 6 升级到 xcode 6 GM 种子后的 Swift 编译器错误

安装xcode6 beta 后调试出现Unable to boot the iOS Simulator以及编译苹果官方Swift的demo报错failed with exit code 1的解决的方法

将 Xcode 6 beta 6 更新到 beta 7 后出现“可选错误”

用 txt 文件中的字符串填充数组 [XCode6 Beta1 的解决方案不再有效]

id 警告:找不到选项的目录

Appstore 添加构建警告