缺少带有默认参数的声明

Missing declaration with default argument

这段代码是错误的,还是已知问题?

final class Foo {
    //@inlinable @inline(_always)
    static func bar(_ first: String = "default", _ second: Int) {
        print(first,second)
    }
}

Foo.bar(2)

结果:

我并不觉得某些评论的方式令人惊讶。必须始终按顺序提供参数。在完全没有标签的情况下,唯一有效的方法是提供第一个参数或两者。因此,提供单个参数意味着您需要提供一个字符串。默认值不会改变任何这些。

该错误消息与往常一样无用,其他语言的行为可能有所不同,但这不构成错误。如果有什么可抱怨的,那就是编译器应该对原始方法声明发出警告,因为第一个参数的默认值是多余的。

我不会说这是一个错误,更可能是一个功能。这段代码闻起来真的很糟糕...

  • 您没有指定参数的名称,这可能会导致非常糟糕的事情并将 Int 分配给 String...我不会感到惊讶

现在我不想 "educate" 你如何编写漂亮的代码,但你上面发布的示例确实不是。编写没有标签的函数不是很直观,这是为什么我们应该使用标签的完美示例...按照 Swift 社区的建议编写函数非常棒...

    final class Foo {
    //@inlinable @inline(_always)
    static func bar(first: String = "default", second: Int) {
        print(first,second)
    }
}

Foo.bar(second: 2)

为什么不直接省略下划线呢? :)