在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)?它是如何决定的?
答案 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提案的主题,如果尚未提及的话。