我有以下代码:
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函数?
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)
(假设level是Int.)
| 归档时间: |
|
| 查看次数: |
7928 次 |
| 最近记录: |