Swift CNContactRequestAccess 线程

Swift CNContactRequestAccess threading

我有获取authStatus的功能。但每当它是 .notDetermined -> 我发送请求访问以获得许可。 问题是 function returns bool 然后请求许可。我觉得线程的问题,我该如何处理?

class func AskForPermission() -> Bool {
        var result = false
        let authStatus = CNContactStore.authorizationStatus(for: .contacts)
        switch authStatus{
        case .notDetermined:
            let contactStore = CNContactStore.init()
            contactStore.requestAccess(for: .contacts, completionHandler: { (success, nil) in
                if success {
                    result = true
                } else {
                    result = false
                }
            })
        case .authorized:
            result = true
        default:
            result = false
        }

        print(result)
        return result
    }

使用 Closer 而不是返回布尔值

'func AskForPermission(completionHandler:@escaping (_ autherizationStatus:Bool)->Void){
    let authStatus = CNContactStore.authorizationStatus(for: .contacts)
    switch authStatus{
    case .notDetermined:
        let contactStore = CNContactStore.init()
        contactStore.requestAccess(for: .contacts, completionHandler: { (success, nil) in
            DispatchQueue.main.async {
                if success {
                    completionHandler(true)
                } else {
                    completionHandler(false)
                }
            }
        })
    case .authorized:
        completionHandler(false)
        break
    default:
        completionHandler(false)
       break
    }
}'

像这样调用这个函数

'AskForPermission(completionHandler: { (isAuthorized) in
                if isAuthorized{
                    // Do your Work here....
                }
            })'