我想写一个扩展,Double这样它 func 就会给出Int值。
extension Double {
func toPercentage() -> Int {
var mutableSelf = self
var twoDigits = Double(round(1000*mutableSelf)/1000)
return Int(twoDigits) * 100
}
}
Run Code Online (Sandbox Code Playgroud)
在线var twoDigits = Double(round(1000*mutableSelf)/1000)编译器抛出红色 - Cannot use mutating member on immutable value: 'self' is immutable
但我确实将 self 重新分配给mutableSelf变量。Double 是结构体,不是引用类型,为什么会出现错误?
由于您处于 的扩展名中Double,编译器推断 round()为 的mutating func round()方法Double,即使调用与其签名不匹配。此行为已报告为错误:
您可以参考全局 C 库函数
extension Double {
func toPercentage() -> Int {
let twoDigits = Darwin.round(1000*self)/1000
return Int(twoDigits * 100)
}
}
Run Code Online (Sandbox Code Playgroud)
或者更好,使用以下Double.rounded()方法:
extension Double {
func toPercentage() -> Int {
let twoDigits = (1000*self).rounded()/1000
return Int(twoDigits * 100)
}
}
Run Code Online (Sandbox Code Playgroud)
或者干脆
extension Double {
func toPercentage() -> Int {
return Int((100 * self).rounded())
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |