2017-02-27 69 views
-2

考慮這個例子。 else if條件檢查字符串對象看起來很大而笨重。Swift 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 
} 

注:沒有必要比較characters.count0,因爲「做什麼」,如果unwrappedOptional等於Hello將只執行。

0

你可以讓你的代碼是這樣的:

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 { 

} 

正如@NiravD說,沒有必要爲!unwrappedObj.isEmpty但我只是把它在這裏,因爲你.count > 0線也是八九不離十難看。