2017-02-27 65 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线也是八九不离十难看。