Swift CNContactRequestAccess线程

Swift CNContactRequestAccess线程,swift,multithreading,cncontact,Swift,Multithreading,Cncontact,我有获取身份验证状态的函数。但无论何时.notDetermined->我都会发送请求访问以获得权限。 问题是函数返回bool,然后请求权限。我认为线程的问题,我如何处理它 class func AskForPermission() -> Bool { var result = false let authStatus = CNContactStore.authorizationStatus(for: .contacts) switch aut

我有获取身份验证状态的函数。但无论何时.notDetermined->我都会发送请求访问以获得权限。 问题是函数返回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....
                }
            })'

使用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....
                }
            })'

谢谢你的回复!如何使用此功能?例如
if!AskForPermission(){return nil}
非常感谢!它起作用了。我需要仔细考虑一下谢谢你的回复!如何使用此功能?例如
if!AskForPermission(){return nil}
非常感谢!它起作用了。我需要考虑一下关闭