我有以下代码: let lootBase = Int(pow((Decimal(level + 1)), 3) * 2) let lootMod = Int(pow(Decimal(level), 2) * 2) value = Int(arc4random_uniform(UInt32(lootBase)) + lootMod) 我需要成为一名Int.我尝试围绕Int()的pow计算时得
let lootBase = Int(pow((Decimal(level + 1)), 3) * 2) let lootMod = Int(pow(Decimal(level), 2) * 2) value = Int(arc4random_uniform(UInt32(lootBase)) + lootMod)
我需要成为一名Int.我尝试围绕Int()的pow计算时得到的错误是:
“无法使用Decimal类型的参数列表调用int类型的初始值设定项”
如何在Swift 3中使用int函数的pow函数?
Int没有使用Decimal的初始化程序,因此您无法使用Int(…)等初始化语法直接将Decimal转换为Int.你可以像这样使用pow(Decimal,Int):
let lootBase = Int(pow((Decimal(level + 1)), 3) * 2 as NSDecimalNumber) let lootMod = Int(pow(Decimal(level), 2) * 2 as NSDecimalNumber) let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod
或者,你可以像这样使用pow(Double,Double):
let lootBase = Int(pow((Double(level + 1)), 3) * 2) let lootMod = Int(pow(Double(level), 2) * 2) let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod
但是,如果你只计算一个整数值的幂为2或3,那么pow(Decimal,Int)和pow(Double,Double)都远没有效率.
您可以像这样声明一个简单的函数,如平方或立方体:
func squared(_ val: Int) -> Int {return val * val} func cubed(_ val: Int) -> Int {return val * val * val}
并使用它们代替pow(…,2)或pow(…,3):
let lootBase = cubed(level + 1) * 2 let lootMod = squared(level) * 2 let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod
(假设级别是Int.)