Swift 3:如何缩短可选检查以及可选的条件检查?
问题描述:
考虑这个例子。 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
}
有没有更好的方法来处理这个问题?
答
您可以这样使用条件if let
。
else if let unwrappedOptional = aObject.bObject.cObject.stringObj, unwrappedOptional == "Hello" {
//do something
}
注:没有必要比较characters.count
到0
,因为“做什么”,如果unwrappedOptional
等于Hello
将只执行。
答
你可以让你的代码是这样的:
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
线也是八九不离十难看。
使用逗号','代替'&&' –