对 LoginManager Facebook sdk swift 的模糊引用

Posted

技术标签:

【中文标题】对 LoginManager Facebook sdk swift 的模糊引用【英文标题】:Ambiguous reference to LoginManager Facebook sdk swift 【发布时间】:2016-11-07 13:47:33 【问题描述】:

我已经在 xcode8 的 ios 项目中手动集成了 facebook-sdk-swift,文档 [https://developers.facebook.com/docs/swift/getting-started].我收到错误

"对成员 logIn(_:viewController:completion:) 的不明确引用"

我的代码是

   loginManager.logIn(["public_profile","email"], viewController: self)  loginResult in switch loginResult  case .Failed(let error): print(error) case .Cancelled: print("User cancelled login.") case .Success(let grantedPermissions, let declinedPermissions, let accessToken): print("Logged in!") 

有什么帮助吗?

【问题讨论】:

Quickfix 应该会给你一个提示。可能您需要将第一个参数命名为 loginManager.logIn(argumentDescription: ["public_profile","email"], viewController:... 【参考方案1】:

有效的 Swift 3 代码:

let loginManager = LoginManager()        
loginManager.logIn(readPermissions: [.publicProfile], viewController: nil)  loginResult in
        switch loginResult 
        case .failed(let error):
            print(error)
        case .cancelled:
            print("User cancelled login.")
        case .success( _, _, _):
            print("Logged in!")
        
    

【讨论】:

【参考方案2】:

为权限提供枚举值,不要设置 viewController。

//...

loginManager.logIn([.publicProfile, .email], viewController: nil)  results in

//...

【讨论】:

【参考方案3】:

解决了我的问题,我以字符串格式传递的权限,快速编译器不允许look here

【讨论】:

【参考方案4】:

对于那些遵循"Facebook Login in Swift - Getting Started"指南并偶然发现这个问题的人,您应该将.PublicProfile替换为.publicProfile,LoginResult中的大小写也以小写字母开头,所以也替换它们

【讨论】:

【参考方案5】:

XCode 12+:从 Cocoapods 版本切换到 Swift Package Manager 解决了这个问题。

【讨论】:

以上是关于对 LoginManager Facebook sdk swift 的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章

react-native-fbsdk / Facebook iOS SDK - 未定义不是对象(评估'LoginManager.logInWithReadPermissions')

LoginManager.logInWithReadPermissions 在 Android 上从未解决

Swift 获取 Facebook AccessToken

FB SDK 错误:登录失败(react-native)

如何在 ios sdk 中从 facebook 注销

无法获得FB用户生日,android?