Swift和params方法的默认值

时间:2017-03-30 14:22:01

标签: swift overloading

A.swift文件中

class A {
    func c(d: String = "abc") {
        // (1)
    }
}

并在B.swift文件中

class B {
   func z() {
      let aaa = A()
      aaa.c()
   }
}

extension A {
    func c(d: String = "abc", e: String = "123") {
        // (2)
    }
}

现在,我想知道:在z()中被称为(1)还是(2)?它是如何决定的?

1 个答案:

答案 0 :(得分:1)

您的班级A有两个功能c(d:)c(d:e:)。在Swift中,两个函数可以共享相同的“名字”,但可以通过它们的参数进行区分。因此,函数的“全名”由其名称及其所有参数标签组成。

替换

aaa.c()

aaa.c(d:e:)()

以全名调用函数c(d:e:)(2)将执行。

请注意,aaa.c()相当于aaa.c(d:)()。当调用不明确时,Swift似乎默认使用参数最少的函数;这可能是未来Swift Evolution提案的主题,如果尚未提及的话。