错误“调用可以抛出,但未标记'尝试'并且未处理错误”

时间:2015-10-07 16:45:25

标签: ios xcode swift parse-platform error-handling

使用这段代码获取错误 “呼叫可以抛出,但没有标记'尝试'并且错误未得到处理”

我正在使用Xcode 7.1最新的测试版和swift 2.0

func checkUserCredentials() -> Bool {
    PFUser.logInWithUsername(userName!, password: password!)

    if (PFUser.currentUser() != nil) {
        return true
    }
    return false

enter image description here

1 个答案:

答案 0 :(得分:10)

Swift 2.0引入了overload that accepts two parameters: a key selector, and an element selector.。该错误表明logInWithUsername:password:可能会抛出错误,您必须对该错误执行某些操作。您有以下几种选择之一:

将您的checkUserCredentials()功能标记为throws并将错误传播给来电者:

func checkUserCredentials() throws -> Bool {
    try PFUser.logInWithUsername(userName!, password: password!)

    if (PFUser.currentUser() != nil) {
        return true
    }
    return false
}

使用do / catch语法来捕捉潜在错误:

func checkUserCredentials() -> Bool {
    do {
        try PFUser.logInWithUsername(userName!, password: password!)
    }
    catch _ {
        // Error handling
    }

    if (PFUser.currentUser() != nil) {
        return true
    }
    return false
}

如果抛出错误,请使用try!关键字来获取程序陷阱,这只适用于您知道函数在当前情况下不会抛出的事实 - 类似于使用!强制打开一个可选的(似乎不太可能给出方法名称):

func checkUserCredentials() -> Bool {
    try! PFUser.logInWithUsername(userName!, password: password!)

    if (PFUser.currentUser() != nil) {
        return true
    }
    return false
}