Int
没有一个初始化服用Decimal
,所以你不能转换到Decimal
直接Int
与初始化语法像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)
都远没有效率。
可以宣布一个简单的功能,如squared
或cubed
这样的:
func squared(_ val: Int) -> Int {return val * val}
func cubed(_ val: Int) -> Int {return val * val * val}
,而是使用他们的pow(..., 2)
或pow(..., 3)
:(假设level
是Int
)
let lootBase = cubed(level + 1) * 2
let lootMod = squared(level) * 2
let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod