我正在努力做到以下几点:
var isSomeThingTrue = checkSomeThing()
if (let someOptional = getSomeOptional(),
let anotherOptional = getAnotherOptional(withSomeOptional: someOptional)) ||
isSomeThingTrue {
// do something
} else {
// do something else
}
是否有一种方法可以通过if语句实现,或者我必须使用guard语句?
2条答案
按热度按时间lbsnaicq1#
if let x = y
语法的要点在于,if块仅在y
不为nil时运行,因此可以将其绑定到一个非可选的let常量x
,并且x
可以在if块中使用。然而,在您的例子中,即使
getSomeOptional()
返回nil,if块仍然可以运行,但是isSomeThingTrue
为true,所以在if块中,您不知道getSomeOpional
是否返回nil,someOptional
仍然必须是可选类型,anotherOptional
也是如此。因此,您不需要使用
if let
来执行此操作,只需执行以下操作即可:如果
getAnotherOptional
采用非可选,则使用flatMap
:f0brbegy2#
我想有很多方法可以剥这只猫的皮,所以这里还有一个,如果你把要在
if
内部执行的代码移到一个函数中以避免代码重复,下面的方法在我的选项中很容易阅读