Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法对不可变值Swift使用变异成员_Swift - Fatal编程技术网

无法对不可变值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)有什么意义?