Swift是否允许通过if-else控制流传递函数参数?报错求解
Swift函数参数传递时能否使用if-else表达式?如何解决语法错误?
问题解答
Swift不支持直接在函数参数传递位置使用多行if-else语句作为表达式,报错信息'if' may only be used as expression in return, throw, or as the source of an assignment已经明确说明:if表达式仅允许用在return、throw语句中,或者作为赋值语句的右侧值。
解决方法
有两种常见的修复方式,根据场景选择即可:
方式1:使用三元运算符(简洁版)
适合分支逻辑简单的场景,这里的iOS版本判断刚好符合:
getLocation(with: #available(iOS 14.0, *) ? coreLocation.authorizationStatus : CLLocationManager.authorizationStatus())
方式2:先赋值到变量再传参(易读版)
适合分支逻辑复杂的场景,可读性更强,后续维护成本更低:
let authStatus: CLAuthorizationStatus if #available(iOS 14.0, *) { authStatus = coreLocation.authorizationStatus } else { authStatus = CLLocationManager.authorizationStatus() } getLocation(with: authStatus)
补充说明
两种方式最终效果完全一致,若后续需要扩展分支逻辑,优先选择第二种方式,代码的可读性和可维护性更优。
内容的提问来源于stack exchange,提问作者Bitwise DEVS
相关产品推荐
相关产品推荐

