2016-09-24 4 views
0

はちょっと前スウィフト3に私が以前に使用:numberOfCreditsDouble?あるなぜスイフト3でこの条件付きの仕事はありませんか?

if CustomUser.sharedInstance.numberOfCredits > 0 { 
} 

二項演算子 '>'は 'Double'型のオペランドには適用できません。 「Int」。どうしてこれなの? 0を0.0に変更して取得します2進演算子 '>'は 'Double'型のオペランドに適用できません。 「ダブル」です。なぜこのラインはSwift 3で動作しないのですか?

+0

共有インスタンスと機能を表示できますか?オプションの問題があるかもしれません。 –

+0

これを試してください: 'CustomUser.sharedInstance.numberOfCredits! > 0.0' –

+1

[こちら](http://stackoverflow.com/a/39427736/6541007)をご確認ください。 – OOPer

答えて

5

numberOfCreditsOptionalDouble?)であるため、これは機能しません。する必要があります:0121 Remove Optional Comparison Operators。それとは別に

if let v = CustomUser.sharedInstance.numberOfCredits, v > 0 { 
} 

P.S。:::それはInt、ないDoubleでなければなりませんようにnumberOfCreditsが聞こえる

はこのようにそれをか?そして、それはOptionalであってはならないかもしれません - もしクレジットがなければ、それは0でしょうか?あなたが何をしているかを知っていないと言うのは難しいです。

2

スイフト3は、同じ基本タイプのオプションと非オプションの比較を削除しました。あなたはこれを処理するための3つのオプションがあります、オプションのラップを解除するためにあなたはそれが非nilであることがわかっている場合

  • が明示的に!で値をアンラップ、
  • 使用if let構造を
  • 使用nil合体演算子
  • if CustomUser.sharedInstance.numberOfCredits ?? 0 > 0 { 
    } 
    
    0:ここ

あなたは番目のオプションを使用する方法であります

注:は省略されている可能性があります。たとえば、sharedInstanceは自動アンラッピングなしのオプションとして定義されているためです。この場合、回避策として??または!を使用するのではなく、根本的な問題を修正する方がよいでしょう。

0
struct CustomerUser { 
    static var sharedInstance = Instance() 
} 

struct Instance { 
    var numberOfCredits: Double? 
} 

let credits = CustomerUser.sharedInstance.numberOfCredits ?? 0.0 

if credits > 0 { 
    print("credits greater than zero") 
} 

numberOfCreditsオプションのダブル(ダブルは?)それはゼロまたはダブル値を含むことが意味されます。

だからこそ、numberOfCreditsがnilだった場合、コンパイラは何をするべきかわかりません。

if CustomUser.sharedInstance.numberOfCredits > 0 // wtf 

変換するためにダブルですか?の場合は、を使用しますか?演算子は変換するだけでなく、numberOfCreditsにDouble値が含まれていますが、numberOfCreditsには0.0が返されます。

let credits = CustomerUser.sharedInstance.numberOfCredits ?? 0.0 
関連する問題