Swift 3:如何缩短可选检查以及该可选项的条件检查?

时间:2017-02-27 08:58:27

标签: ios swift swift3

考虑这个例子。对字符串对象的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
}

有更优雅的方式来处理这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以通过if let这种方式使用条件。

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

    //do something
}

注意:无需将characters.count0进行比较,因为只有当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行也很难看。