簡體   English   中英

canEvaluatePolicy調用Swift Xcode 7中的額外參數“錯誤”

[英]canEvaluatePolicy Extra argument 'error' in call Swift Xcode 7

我迅速使用Xcode 7,並且會使用Touch ID。 使用canEvaluatePolicy時只有一個錯誤。 我理解自己的錯誤,我也調用了一個參數。 只有當我不打電話時,它才會使我出錯,因為我沒有處理我的錯誤。這是我的錯誤和代碼:PS:抱歉,我的英語不好。

Error : Extra argument 'error' in call

要么

Error : Call can throw, but it is not marked with 'try' and the error is not handled

我的代碼:

import Foundation
import UIKit
import LocalAuthentication

class touchid : UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var lblTouchId: UILabel!

    override func viewDidLoad() {
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

    }




    @IBAction func authenticateWithTouchID(sender: AnyObject) {

        let authenticationObject = LAContext()
        self.pleaseWait()
        if authenticationObject.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics) {
            authenticationObject.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Access", reply: {(Bool, authenticationError) in

                if authenticationError != nil {
                // Authentification annulé ou Touch id non disponible
                    self.lblTouchId.text = "annulé ou touch id non disponible"
                    self.clearAllNotice()
                    self.errorNotice("Erreur !")
                }
                else {
                if Bool == true {
                    self.lblTouchId.text = "authentification réussi"
                    self.clearAllNotice()
                    self.successNotice("Succès !")
                }
                else {
                    self.lblTouchId.text = "echec de l'authentification"
                    self.clearAllNotice()
                    self.errorNotice("Erreur !")
                }
                }
                }
            )
        }
    }
}

如在Swift與Cocoa和Objective-C結合使用中所述,從Swift 2.0調用時,所有使用NSError返回錯誤對象的Objective-C方法現在都將throw ,因此您需要使用:

do {
    try method()
} catch let error as NSError {
    reportError(error)
}

method()調用中刪除對NSError的引用。

查看蘋果的文檔 ,似乎有些不對勁。 方法簽名為:

func canEvaluatePolicy(_ policy: LAPolicy, error error: NSErrorPointer) -> Bool

奇怪的是,該方法目前不會throw任何東西,因此沒有必要將其放入嘗試代碼塊。 我不知道該框架是否仍在使用Swift 2.0進行調整(但我想是的),但是我想我還記得它在Xcode / Swift beta迭代中的某一時刻實現了throw 有一次,編譯器表現得有點兒呆滯,說:

1-方法簽名只有1個參數,但是實現了throws (它沒有)
2-但是如上所述,當您這樣做時,編譯器會給您不同的錯誤。

需要指出的是,在撰寫本文時,當前的方法簽名具有第二個參數,即NSErrorPointer而不是NSError? 賓語。 像目前的Apple文檔建議的那樣對待它,因此添加以下內容:

var error: NSErrorPointer?
let canEvaluatePolicty = LAContext().canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: error!)

並且您的代碼應編譯。 隨着beta的更多迭代出現,密切關注此框架可能是一個好主意。

祝好運!

盡管g_blott的答案確實可以編譯,但是當您不確定會發生什么情況時,強制拆開不是一個好習慣。

這段代碼也可以編譯,但不會強制解開任何內容並處理錯誤的存在:

    var error: NSError?
    let errorPointer: NSErrorPointer = NSErrorPointer(&error)
    let canEvaluate = context.canEvaluatePolicy(.deviceOwnerAuthentication, error: errorPointer)
    if let error = error {
        print("Oh noes, an error! ", error)
    } else if canEvaluate {
        print("Can evaluate")
    } else {
        print("Can't evaluate")
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM