我使用的是facebookcore(我认为问题出在那里),当我试图编译时,出现错误“cannot convert value of type(_, _) -> ()to expected argument typeUserProfile.Completion”。
错误出现在第一行,代码是

UserProfile.loadCurrent() { (userProfile, error) in
    guard let userProfile = userProfile else {
        completion(profile: nil, error: Error(domain: "FacebookLoginManager", code: 333, userInfo: ["description" : "Error al obtener el perfil del usuario"]))
        return
    }
    completion(profile: userProfile, error: error)
}

UserProfile.Completion代码是
public typealias Completion = (FetchResult) -> Void

代码是
extension UserProfile.FetchResult {
    internal init(sdkProfile: FBSDKProfile?, error: Error?) {
        if let error = error {
            self = .failed(error)
        } else if let sdkProfile = sdkProfile {
            let profile = UserProfile(sdkProfile: sdkProfile)
            self = .success(profile)
        } else {
            let error = NSError(domain: "", code: 42, userInfo: nil)
            self = .failed(error)
        }
    }
}

最佳答案

通过查看facebookcore文档,似乎loadCurrent()的完成闭包是FetchResult类型,它是一个枚举:
(FetchResult) -> Void
而不是:
(UserProfile?,Error?) -> Void
你应该这样改:

UserProfile.loadCurrent() { (fetchResult) in

    UserProfile.loadCurrent { (fetchResult) in

        switch fetchResult {
        case .success(let userProfile):
            completion(profile: userProfile, error: nil)
        case .failed(let error):
            completion(profile: nil, error: Error(domain: "FacebookLoginManager", code: 333, userInfo: ["description" : "Error al obtener el perfil del usuario"]))
        }

    }
}

关于swift - 使用Swift 3无法将类型'(_,_)->()'的值转换为预期的参数类型'UserProfile.Completion',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45138773/

10-12 14:39