我可以调用一个抛出if语句的swift函数吗?

时间:2017-01-27 16:49:00

标签: swift

说我有一个叫做的函数:

func myFunction() throws -> Bool {
    // ...
    return true
}

是否存在我不知道如何使用它的语法:

if aFlag && try myFunction() {
   // do this
}

当我编译它时,它当然失败了,因为它说“尝试不能出现在非赋值操作的权利”。有没有办法使这项工作或我将不得不采用我目前的解决方案:

if aFlag {
    let result = try myFunction()
    if result {
        // do this
    }
}

2 个答案:

答案 0 :(得分:2)

您使用try?通过将错误转换为可选值来处理错误,并与nil合并运算符结合使用以提供错误,例如false作为调用抛出的具体值( - >视为nil

func myFunction() throws -> Bool {
    return true
}

let aFlag = true

if aFlag, (try? myFunction()) ?? false {
    print("Function call succeeded and returned 'true'!")
}

/* or ...
if aFlag && (try? myFunction()) ?? false { ... } */

/* or, optionally bind the return value and use as predicate if non-nil ...
if aFlag, let anotherFlag = (try? myFunction()), anotherFlag { ... } */
然而,这会抑制抛出的错误,这使得myFunction()首先成为投掷者有点疑问。也许您更希望在您在投掷函数中视为错误的情况下只返回nil的函数?

答案 1 :(得分:0)

在Swift 3中,您可以使用,而不是&&,例如

if aFlag, try myFunction() {
    print("OK")
}