8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

AbdelKh 1月前

56 0

我正在尝试制作这个 customRound 函数,但是 Xcode 抱怨说无法将 () 类型的值转换为 Double我该如何解决这个问题?extension Double { func customRound(zer...

我正在尝试制作这个 customRound 函数,但是 Xcode 抱怨说 无法将 () 类型的值转换为 Double 我该如何解决这个问题?

extension Double {

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

更新:

extension Double {

    func customRound(digits: Int) -> Double {
        return Darwin.round(pow(10.0, Double(digits))*self) / pow(10.0, Double(digits))
    }
  
}
帖子版权声明 1、本帖标题:为什么我不能在扩展中使用 round?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由AbdelKh在本站《swift》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @vacawama:我想按照你说的做,但是我告诉自己为什么要创建一个内部常数,但我同意你的观点。所以你认为最好使用一个常数而不是计算两次?对吗?

  • Swift 认为你正在尝试调用 round() 的变异函数, Double 不是 Darwin 模块中的 round() 内置函数 Darwin.round()

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

    在扩展中调用方法时 self. 不必指定 self.round(...) round 您想要 Darwin 版本时 self 尝试应用变异

    除了使用 Darwin. 选择所需的 round 以下 Darwin 内容 UIKit 的框架: Foundation .

  • Double 兼具 .round() 和 , .rounded() 前者是可变的,如果要返回值,则需要使用后者。

    以下是如何使用非变异函数 Double.rounded()

    extension Double {
        func customRound(zeros: Int) -> Double {
            return (Double(zeros) * self).rounded() / Double(zeros)
        }
    }
    
    extension Double {
        func customRound(digits: Int) -> Double {
            return (pow(10.0, Double(digits)) * self).rounded() / pow(10.0, Double(digits))
        }
    }
    
  • 对先前回复的扩展,具有更安全的优化逻辑。

    extension Double {
        func rounded(toDecimal decimal: Int) -> Double {
            let multiplier = pow(10.0, Double(decimal))
            let value = Double(self * multiplier).rounded()
            return value / multiplier
        }
    }
    
返回
作者最近主题: