2017-06-15 12 views
0

コンパイラの警告なしスウィフトにフロートするのObjective-CからNSDecimalNumberをキャストすることができます。は、どのように私は<strong>スウィフト3</strong>でこの機能を持っている

私はすべてをSwiftに変換中です

私が呼ぶたびにitemRating.update(rating)それは悪名高い与える:常に警告を与える

if let rating = product.rating as Decimal?, let floatRating = rating as? Float { 
    itemRating.update(floatRating) //sets item rating. Number of stars 
} 

::私は仕事にそれを得た

fatal error: unexpectedly found nil while unwrapping an Optional value

唯一の方法は、この醜い実装によってだった

Cast from 'Decimal' to unrelated type 'Float' always fails.

上記のエラーで私が試したすべての他の方法で失敗します。ここで


update()の定義です:

- (void)updateRating:(float)inRating; 

これで何が起こっていますか?

+0

itemRatingはどのように宣言されていますか? –

+0

'UIImageView'を継承するカスタムタイプです – theblindprophet

+0

' itemRating.update(rating) 'でクラッシュした場合、Floatへの変換は問題になりません!おそらく 'itemRating'は' nil'ですか? –

答えて

3

product.rating場合は、ちょうどNSNumberからfloatValueNSDecimalNumber以来の継承を取得し、その後、オプションのラップを解除するには、オプションのバインディングを使用して、実際にNSDecimalNumber(ない(NS)Decimal)のインスタンスです。

if let rating = product.rating { 
    itemRating.update(rating.floatValue) 
} 
関連する問題