Swift 中的本地参数名称和外部参数名称有什么区别
What is the difference between Local and External Parameter Names in Swift
struct Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius is 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius is 0.0
我很困惑为什么 init 函数有 (fromFahrenheit fahrenheit: Double) 和 (fromFahrenheit fahrenheit: Double)。文档说:
"The first initializer has a single initialization parameter with an external name of from Fahrenheit and a local name of fahrenheit. The second initializer has a single initialization parameter with an external name of from Kelvin and a local name of kelvin."
为什么我们需要这么多名字?
方法中使用的是局部参数,调用方法时使用的是外部参数。
这用于与 Objective C
的简单接口。 Objective C
方法既有命名的本地参数,也有外部参数。
例如,这是一个典型的 Objective C
方法。
-(void)setValue:(NSObject *)object forKey:(NSObject *)key
这将被称为 [dict setValue:object1 forKey:object2]
swift中的相同函数将被调用为
dict.setValue(object1,forKey:object2)
也明确了每个参数的用途,有助于区分名称相似、参数不同的函数。函数也可以具有相同的签名和不同的外部名称。
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
在您的示例中,两个函数都采用 Double
。如果没有外部参数,调用时将无法区分它们。
struct Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius is 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius is 0.0
我很困惑为什么 init 函数有 (fromFahrenheit fahrenheit: Double) 和 (fromFahrenheit fahrenheit: Double)。文档说:
"The first initializer has a single initialization parameter with an external name of from Fahrenheit and a local name of fahrenheit. The second initializer has a single initialization parameter with an external name of from Kelvin and a local name of kelvin."
为什么我们需要这么多名字?
方法中使用的是局部参数,调用方法时使用的是外部参数。
这用于与
Objective C
的简单接口。Objective C
方法既有命名的本地参数,也有外部参数。例如,这是一个典型的
Objective C
方法。-(void)setValue:(NSObject *)object forKey:(NSObject *)key
这将被称为
[dict setValue:object1 forKey:object2]
swift中的相同函数将被调用为
dict.setValue(object1,forKey:object2)
也明确了每个参数的用途,有助于区分名称相似、参数不同的函数。函数也可以具有相同的签名和不同的外部名称。
init(fromFahrenheit fahrenheit: Double) { temperatureInCelsius = (fahrenheit - 32.0) / 1.8 } init(fromKelvin kelvin: Double) { temperatureInCelsius = kelvin - 273.15 }
在您的示例中,两个函数都采用
Double
。如果没有外部参数,调用时将无法区分它们。