Swift 3: Десятичное число до Int

Я попытался преобразовать Decimal в Int с следующим кодом:

Int(pow(Decimal(size), 2) - 1) 

Но я понимаю:

.swift:254:43: Cannot invoke initializer for type 'Int' with an argument list of type '(Decimal)' 

Здесь я знаю, что pow возвращает Decimal но кажется, что Int не имеет конструкторов и функций-членов для преобразования Decimal в Int.
Как преобразовать Decimal в Int в Swift 3?

Ответы

Ответ 1

Это мой обновленный ответ (спасибо Мартину R и OP за замечания). Задача OP заключалась в том, чтобы просто pow(x: Decimal,y: Int) → Decimal функцию pow(x: Decimal,y: Int) → Decimal в Int после вычитания 1 из результата. Я ответил на этот вопрос с помощью этого сообщения SO для документации NSDecimal и Apple на Decimal. Вы должны преобразовать свой результат в NSDecimalNumber, который, в свою очередь, может быть запущен в Int:

let size = Decimal(2)
let test = pow(size, 2) - 1
let result = NSDecimalNumber(decimal: test)
print(Int(result)) // testing the cast to Int

Ответ 2

let decimalToInt = (yourDecimal as NSDecimalNumber).intValue

или как @MartinR предложил:

let decimalToInt = NSDecimalNumber(decimal: yourDecimal).intValue

Ответ 3

В любом из опубликованных ответов нет ничего плохого, но я хотел бы предложить расширение, которое сокращает многословность сценариев, в которых вам нужно использовать это часто.

extension Decimal {
    var int: Int {
        return NSDecimalNumber(decimal: self).intValue
    }
}

Чтобы назвать это:

let powerDecimal = pow(2, 2) // Output is Decimal
let powerInt = powerDecimal.int // Output is now an Int