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