缺少带有默认参数的声明

时间:2018-10-11 08:39:14

标签: swift default-arguments

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

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

Foo.bar(2)

结果:session multiplexing

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

  • 您无需为参数指定名称,否则可能会导致非常糟糕的情况,并将Int分配给String ...我不会感到惊讶

现在,我不想“教育”您如何编写漂亮的代码,但是您上面发布的示例确实不是。不用标签写函数不是很直观,这就是为什么我们应该使用标签的完美例子... Swift社区建议的写函数的功能真棒...

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

Foo.bar(second: 2)

为什么不只删除下划线? :)