Swift Decimal
とObjective C NSDecimalNumber
の間の型変換に問題があります。Swift 3のNSDecimalNumberではなく、Objective Cへの小数点のインポート
私はスウィフトクラスがある場合:
@objc class Exam: NSObject {
var grade: Decimal = 90.0
}
を客観Cでそのスウィフトクラスを使用しようと、
Exam *exam = [[Exam alloc] init];
NSDecimalNumber *result = [[NSDecimalNumber zero] decimalNumberByAdding:grade.value];
私はエラーを取得する:それとして
Sending 'NSDecimal' to parameter of incompatible type 'NSDecimalNumber * _Nonnull'
grade
はNSDecimal
ではなく、NSDecimalNumber
として扱われているようです。それは私が何か間違ったことをやっている)1のであれば、私はよく分からない
The Swift overlay to the Foundation framework provides the Decimal structure, which bridges to the NSDecimalNumber class. The Decimal value type offers the same functionality as the NSDecimalNumber reference type, and the two can be used interchangeably in Swift code that interacts with Objective-C APIs. This behavior is similar to how Swift bridges standard string, numeric, and collection types to their corresponding Foundation classes.
を言うあたり、これは間違っているようです。 2)ドキュメントに誤りがありますか?3)これは迅速なバグです。
その後、私は全体の醜いdecimalNumberByAdding
ダンスをやってなく、そのような+
などの単純な算術演算を行うことができないので、私は明示的に私のスウィフトクラスNSDecimalNumber
の値を作成する必要はありません。
私の知る限り、 '、NSDecimalNumber'を見ることができるようにObjective-CとSwiftでは同じで、ObjCのNSDecimalはSwiftのDecimalです。あなたはそれらをSwiftでキャストすることができますが、SwiftはObjCの 'NSDecimalNumber'とSwiftの' Decimal'(他のオーバーレイタイプと同じように)を自動的に橋渡ししません。これは、ドキュメントのバグまたはエラーである可能性があります。 –
似たような混乱がここにあります:http://stackoverflow.com/questions/39890795/decimal-to-double-conversion-in-swift-3。 –
そのドキュメンテーションは私が期待している動作を完全に意味していますか? "Decimal値型はNSDecimalNumber参照型と同じ機能を提供し、2つはObjective-C APIと相互作用するSwiftコードで互換的に使用できます"。おそらくバグ報告に行くでしょう。 – chrismanderson