Swift 和 params 方法默认值



在我拥有的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(?它是如何决定的?

你的类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提案的主题,如果它还没有的话。

最新更新