web-dev-qa-db-fra.com

Swift 3: décimal en int

J'ai essayé de convertir Decimal en Int avec le code suivant:

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

Mais je reçois:

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

Ici, je sais que pow renvoie un Decimal mais il semble qu'Int n'a pas de constructeurs et de fonctions membres pour convertir Decimal en Int.
Comment puis-je convertir Decimal en Int en Swift 3?

25
Colin Witkamp

Ceci est ma réponse mise à jour (merci à Martin R et au PO pour les remarques). Le problème de l'OP consistait simplement à transtyper la fonction pow(x: Decimal,y: Int) -> Decimal en un Int après avoir soustrait 1 du résultat. J'ai répondu à la question à l'aide de ce SO post pour NSDecimal et la documentation d'Apple sur Decimal . Vous devez convertir votre résultat en NSDecimalNumber, qui peut à son tour être converti en Int:

let size = Decimal(2)
let test = pow(size, 2) - 1
let result = NSDecimalNumber(decimal: test)
print(Int(result)) // testing the cast to Int
27
tech4242
let decimalToInt = (yourDecimal as NSDecimalNumber).intValue

ou comme @MartinR l'a suggéré:

let decimalToInt = NSDecimalNumber(decimal: yourDecimal).intValue
11
Juan Boero

Il n'y a rien de mal avec l'une ou l'autre des réponses publiées, mais je voudrais proposer une extension qui réduit la verbosité des scénarios où vous devez l'utiliser fréquemment.

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

Pour l'appeler:

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