考虑这个例子。对字符串对象的else if条件检查看起来很大且很粗糙。
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.count
与0
进行比较,因为只有当unwrappedOptional
等于Hello
时,“执行某些操作”才会执行。
答案 1 :(得分: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
行也很难看。