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
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么 init 函数有 (fromFahrenheit fahrenheit: Double) 和 (fromFahrenheit fahrenheit: Double)。文档说:
“第一个初始化程序有一个初始化参数,其外部名称为 from Fahrenheit,本地名称为 fahrenheit。第二个初始化程序有一个初始化参数,其外部名称为 from Kelvin,本地名称为 kelvin。”
为什么我们需要这么多名字?
这用于与 的简单接口Objective C。Objective C
方法有命名的本地参数和外部参数。
例如,这是一个典型的Objective C方法。
-(void)setValue:(NSObject *)object forKey:(NSObject *)key
Run Code Online (Sandbox Code Playgroud)
这将被称为[dict setValue:object1 forKey:object2]
swift 中的相同函数将被调用为
dict.setValue(object1,forKey:object2)
Run Code Online (Sandbox Code Playgroud)它还阐明了每个参数的用途,并有助于区分具有相似名称和不同参数的函数。函数也可以具有相同的签名和不同的外部名称。
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
Run Code Online (Sandbox Code Playgroud)
在您的示例中,这两个函数都采用Double. 如果没有外部参数,调用时将无法区分它们。
| 归档时间: |
|
| 查看次数: |
1724 次 |
| 最近记录: |