为什么我不能在扩展中使用 round?

wil*_*lly 3 function ios swift

我试图使这个customRound函数,但 Xcode 抱怨无法将类型 () 的值转换为 Double 我怎么可能解决这个问题?

extension Double {

    func customRound(zeros: Int) -> Double {
      return round(Double(zeros)*self) / Double(zeros)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

更新:

extension Double {

    func customRound(digits: Int) -> Double {
        return Darwin.round(pow(10.0, Double(digits))*self) / pow(10.0, Double(digits))
    }
  
}
Run Code Online (Sandbox Code Playgroud)

vac*_*ama 7

Swift 认为您正在尝试调用 的 mutatinground()函数Double而不是round()Darwin 模块中的内置函数。您可以通过明确指定来解决此问题Darwin.round()

extension Double {

    func customRound(zeros: Int) -> Double {
        return Darwin.round(Double(zeros) * self) / Double(zeros)
    }

}
Run Code Online (Sandbox Code Playgroud)

Swift 更喜欢 Double 上定义的那个,因为它试图提供帮助。既然你没有指定self.在扩展调用方法时,它认为你的意思是self.round(...)这样尝试应用,突变roundself,当你想在达尔文的版本。

除了用于Darwin.选择所需的round功能外,您还可以指定任何包含Darwin诸如UIKit或 之类的框架Foundation