Swift 中的 Facebook 登录管理器“表达式不明确”错误

Posted

技术标签:

【中文标题】Swift 中的 Facebook 登录管理器“表达式不明确”错误【英文标题】:Facebook login manager "expression is ambiguous" error in Swift 【发布时间】:2016-12-05 23:37:57 【问题描述】:

我正在尝试使用 Swift 构建 ios 游戏,但在添加自定义 Facebook 登录按钮时遇到了问题。

我在 touchesEnded 函数中有以下代码:

let loginManager = LoginManager()
            loginManager.logIn([ .PublicProfile ], 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!")
                
            

我的问题是 [ .PublicProfile ] 创建了一个构建错误,提示“表达式类型不明确,没有更多上下文”。

现在这很奇怪,因为代码实际上是从 Facebook (https://developers.facebook.com/docs/swift/login) 复制的。

我该如何解决这个问题?

额外信息

这是来自 Facebook API 的登录功能

  public func logIn(_ permissions: [ReadPermission] = [.publicProfile],
                viewController: UIViewController? = nil,
                completion: ((LoginResult) -> Void)? = nil) 
let sdkPermissions = permissions.map( $0.permissionValue.name )
sdkManager.logIn(withReadPermissions: sdkPermissions,
                 from: viewController,
                 handler: LoginManager.sdkCompletionFor(completion))
  

这里是“ReadPermission”枚举

public enum ReadPermission 
  /// Provides access to a subset of items that are part of a person's     public profile.
  case publicProfile
  /// Provides access the list of friends that also use your app.
  case userFriends
  /// Provides access to the person's primary email address.
  case email
  /**
   Permission with a custom string value.
   See https://developers.facebook.com/docs/facebook-login/permissions for full list of available permissions.
   */
  case custom(String)


extension ReadPermission: PermissionRepresentable 
  internal var permissionValue: Permission 
    switch self 
    case .publicProfile: return "public_profile"
    case .userFriends: return "user_friends"
    case .email: return "email"
    case .custom(let string): return Permission(name: string)
    
  

【问题讨论】:

在我的脑海中,听起来像是 Swift 版本之间的歧义。您正在为哪个版本的 iOS 编译?哪个 Swift 版本? IOS 10 和 Swift 3 根据变更日志,API 在 9 月更新为 Swift 3 您确定您在本地使用的版本是最新的吗? 我大约 5 小时前下载了它...我会看看我是否能确定如何检查更新以确保 【参考方案1】:

枚举现在以小写字母开头。 (case publicProfile) 所以你需要使用.publicProfile 而不是.PublicProfile,loginResult 也可能是这样,但我必须看到它才能知道。

【讨论】:

我遇到了和你一样的问题。非常感谢 !注意:.Failled、.Cancelled 和 .Success 也必须小写

以上是关于Swift 中的 Facebook 登录管理器“表达式不明确”错误的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Login 中的取消按钮使用 Swift 崩溃了吗?

swift中的Facebook Native Share对话框

Swift & Facebook 登录:我的 UIViewController 不符合 FBSDKLoginButtonDelegate

iOS Facebook 登录按钮与 swift

取消 Facebook 登录不显示 (Swift)

Swift - 立即解析 Facebook 登录默认为用户取消登录