私は次のコードで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?
これは私の更新された回答です(発言してくれたMartin RとOPに感謝します)。 OPの問題は、結果から1を減算した後、pow(x: Decimal,y: Int) -> Decimal
関数をIntにキャストするだけでした。私はこの NSDecimalのSO投稿 と Decimalに関するAppleのドキュメント の助けを借りて質問に答えました。結果を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
let decimalToInt = (yourDecimal as NSDecimalNumber).intValue
または@MartinRが示唆したように:
let decimalToInt = NSDecimalNumber(decimal: yourDecimal).intValue
投稿された回答のいずれにも問題はありませんが、頻繁に使用する必要があるシナリオの冗長性を軽減する拡張機能を提供したいと思います。
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