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