2017-02-27 16 views
-2

この例を検討してください。文字列オブジェクトに対するelse if条件チェックは、大きくてぎこちなく見えます。スイフト3:オプションの小切手の状態チェックと組み合わせてオプションの小切手を短縮するにはどうすればよいですか?

class A { var bObject = B() } 

class B { var cObject = C() } 

class C { 
    var flag = FALSE 
    var stringObj: String? = "Hello" 
} 

var aObject = A() 

if aObject.bObject.cObject.flag == TRUE { 

    //do something 
    } 
else if aObject.bObject.cObject.stringObject != nil && aObject.bObject.cObject.stringObj!.characters.count > 0 && aObject.bObject.cObject.stringObj! == "Hello" { 

    //do something 
} 
else { 

} 

以下のようなものを使用したいと思います。オプションでバインドされた変数が同じ条件チェックで使用されています。しかし、コードは明白な理由でコンパイルされませんでした。

else if let unwrappedOptional = aObject.bObject.cObject.stringObj && unwrappedOptional.characters.count > 0 && unwrappedOptional == "Hello" { 

    //do something 
} 

これを処理するより洗練された方法がありますか?

+0

は、 '&&'の代わりにカンマ '、'を使用します。 –

答えて

1

このようにしてif letの条件を使用できます。

else if let unwrappedOptional = aObject.bObject.cObject.stringObj, unwrappedOptional == "Hello" { 

    //do something 
} 

注:unwrappedOptionalHelloと等しい場合、「何かをする」だけで実行されますので、0characters.countを比較する必要はありません。

0

あなたはこのようなあなたのコードを作ることができます。@NiravDが言ったように

class A { var bObject = B() } 
class B { var cObject = C() } 
class C { 
    var flag = true 
    var stringObj: String? = "Hello" 
} 

var aObject = A() 

if aObject.bObject.cObject.flag == true { 

} else if let unwrappedObj = aObject.bObject.cObject.stringObj, !unwrappedObj.isEmpty, unwrappedObj == "Hello" { 
    //do something 
} else { 

} 

は、!unwrappedObj.isEmptyのための必要はありませんが、あなたの.count > 0ラインもみかん醜いですので、私はちょうどそれをここに入れています。

関連する問題