Swift 具有相同参数类型的初始化器
Swift Initializers with same argument types
我不确定这是怎么回事。如您所见,有两个具有相同名称和参数类型的建议。
如何决定调用哪个方法?
调用的是带有参数的方法,但是如果我想调用的是包含计算的 init(不提供 windSpeedMilesPerHour 参数的值)怎么办?
一个快速测试,从你的例子中去除所有的渣滓,告诉你答案:
struct S {
init(a:Int) {
print("first one")
}
init(a:Int, b:Int=3) {
print("second one")
}
}
let s = S(a:4) // "first one"
所以基本上第一个初始化程序使得在没有显式 b
参数的情况下无法调用第二个初始化程序。这是一件愚蠢的事情——你已经让 b
的默认值变得毫无用处和毫无意义——但这不是非法的,也没有理由应该是这样。
我不确定这是怎么回事。如您所见,有两个具有相同名称和参数类型的建议。
如何决定调用哪个方法?
调用的是带有参数的方法,但是如果我想调用的是包含计算的 init(不提供 windSpeedMilesPerHour 参数的值)怎么办?
一个快速测试,从你的例子中去除所有的渣滓,告诉你答案:
struct S {
init(a:Int) {
print("first one")
}
init(a:Int, b:Int=3) {
print("second one")
}
}
let s = S(a:4) // "first one"
所以基本上第一个初始化程序使得在没有显式 b
参数的情况下无法调用第二个初始化程序。这是一件愚蠢的事情——你已经让 b
的默认值变得毫无用处和毫无意义——但这不是非法的,也没有理由应该是这样。