无法对不可变值Swift使用变异成员
我想为无法对不可变值Swift使用变异成员,swift,Swift,我想为Double写一个扩展名,这样它func将给出Int值 extension Double { func toPercentage() -> Int { var mutableSelf = self var twoDigits = Double(round(1000*mutableSelf)/1000) return Int(twoDigits) * 100 } } 在线var twodights=Double(舍入(1000*mutableSelf)
Double
写一个扩展名,这样它func将给出Int
值
extension Double {
func toPercentage() -> Int {
var mutableSelf = self
var twoDigits = Double(round(1000*mutableSelf)/1000)
return Int(twoDigits) * 100
}
}
在线var twodights=Double(舍入(1000*mutableSelf)/1000)
编译器抛出红色-不能对不可变值使用变异成员:“self”是不可变的
但我确实将self重新分配给了
mutableSelf
变量。Double是一个结构,它不是引用类型,为什么会出现错误?由于您在Double
的扩展中,编译器推断round()
是Double
的方法,即使调用与其签名不匹配。此行为已报告为错误:
extension Double {
func toPercentage() -> Int {
let twoDigits = Double((1000 * self / 1000).rounded())
return Int(twoDigits) * 100
}
}
extension Double {
func toPercentage() -> Int {
let twoDigits = Darwin.round(1000*self)/1000
return Int(twoDigits * 100)
}
}
或者更好地使用Double.rounded()
方法:
extension Double {
func toPercentage() -> Int {
let twoDigits = (1000*self).rounded()/1000
return Int(twoDigits * 100)
}
}
或者干脆
extension Double {
func toPercentage() -> Int {
return Int((100 * self).rounded())
}
}
由于您在
Double
的扩展中,编译器推断round()
是Double
的方法,即使调用与其签名不匹配。此行为已报告为错误:
extension Double {
func toPercentage() -> Int {
let twoDigits = Darwin.round(1000*self)/1000
return Int(twoDigits * 100)
}
}
或者更好地使用Double.rounded()
方法:
extension Double {
func toPercentage() -> Int {
let twoDigits = (1000*self).rounded()/1000
return Int(twoDigits * 100)
}
}
或者干脆
extension Double {
func toPercentage() -> Int {
return Int((100 * self).rounded())
}
}
试试看
var-mutableSelf=Double(self)
?@zaitsman它是Double的扩展,Double(self)有什么意义?试试看var-mutableSelf=Double(self)
?@zaitsman它是Double的扩展,Double(self)有什么意义?