如何在Swift 3中使用pow()并获得Int

zee*_*ple 5 pow swift3

我有以下代码:

    let lootBase = Int(pow((Decimal(level + 1)), 3) * 2)
    let lootMod = Int(pow(Decimal(level), 2) * 2)
    value = Int(arc4random_uniform(UInt32(lootBase)) + lootMod)
Run Code Online (Sandbox Code Playgroud)

我需要成为一名Int.我尝试围绕Int()的pow计算时得到的错误是:

"无法使用Decimal类型的参数列表调用int类型的初始值设定项"

如何在Swift 3中使用int函数的pow函数?

OOP*_*Per 7

Int没有初始化器Decimal,所以你不能直接使用初始化器语法转换Decimal为.IntInt(...)

你可以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
Run Code Online (Sandbox Code Playgroud)

或者,你可以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
Run Code Online (Sandbox Code Playgroud)

但是,如果你只计算一个整数值的功率为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}
Run Code Online (Sandbox Code Playgroud)

并使用它们代替pow(..., 2)pow(..., 3):

let lootBase = cubed(level + 1) * 2
let lootMod = squared(level) * 2

let value = Int(arc4random_uniform(UInt32(lootBase))) + lootMod
Run Code Online (Sandbox Code Playgroud)

(假设levelInt.)