2017-10-23 6 views
-1

私は次の実装があります。小さいかゼロに等しい私はこのエラーを取得している場合整数の比較エラー:2進演算子 '<='は 'Int'型のオペランドに適用できません。そして、 'int型

class MyClass{ 
static let sharedInstance = MyClass() 
    public var someNumber:Int = 10 

    private func doSomething(){ 

    if self?.someNumber <= 0 { 

    } 
    } 
} 

しかし、私は比較しようとしている:

enter image description here

にもし私があなたのいずれかが、私が修正できる方法を知っている

Cannot force unwrap value of non-optional type 'Int' 

:私はこのエラーを取得するこのpostに解決策を試してみてくださいこのエラーが発生した場合、またはこの問題を回避する方法がある場合は、

+0

なぜあなたは自己が必要ですか?なぜsomeNumber <= 0ではないのですか? –

+0

@ TusharSharma、もし私がかかる?例えば ​​'self.someNumber <= 0'ならばこのエラーが出ます'オプションの型の値 'MyClass?'アンラップされていない。あなたは '!'を使うつもりでしたか?または '?'? ' – user2924482

+0

これは簡略化されていますか?弱い自己のクロージャの中にある本当のコードですか? –

答えて

1

、それが見えます。おそらく、コードは本当に弱い自己で閉鎖されていますか?

これを呼び出すと、自己がnilのように見えます。もしそうなら、あなたは自分がnilある場合は、代わりにsomeNumberの0を使用することを、

if (self?.someNumber ?? 0) <= 0 { 

} 

これが言うように、何かを行う必要があります。あなたは常に10を使用したい場合は、??の後に使用することができます。

if let値を確認してelseで完全に異なるものを実行できます。

+0

この作業は素晴らしいです。ありがとうございました。 – user2924482

+0

自分自身が無かったり、無かったりする理由があるので、最初にstrongSelfにキャストする方が良いです。私の答えは –

+0

です@Lou、クロージャの問題ならば、チェックはMyClassインスタンスをカバーする必要があります。自己はどのようにしてヌル可能であるのですか?あなたが提案しているのは、厄介な回避策です。何とかOPのために働いたのは偶然です。 – RaffAl

1

アンラップする必要はありません。 someNumberはオプションではありません。ただ、やる:あなたはself?が必要な場合は、すべてのコードを含めていないよう

class MyClass{ 
    static let sharedInstance = MyClass() 
    public var someNumber:Int = 10 

    private func doSomething() { 
     if self.someNumber <= 0 { 

     } 
    } 
} 
+0

私はこのエラーを取得しない場合 'オプションの型の値' MyClass? 'アンラップされていない。あなたは '!'を使うつもりでしたか?または '?'? ' – user2924482

+0

「MyClass」とは何ですか?あなたが投稿したコードはどこにもありません。 – RaffAl

+0

@ user2924482 doSomethingそれはインスタンスメソッドです。それは無用ではありません –

0

私はいくつかのコードが不足していると思います。 selfはどのようにしてヌル可能になりますか?これは私が何らかの種類の[weak self]ブロックを持っているときにのみ私に起こります。その場合は、最初に書き直します:

guard let strongSelf = self else { 
    return // Probably this ViewController or object got released after the long running operation 
} 

if strongSelf.someNumber <= 0 { 
    // Do stuff 
} 
関連する問題