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