15

我已经更新到 Xcode 10 并且无法编译我的代码。我从 Facebook SDK (FacebookCore) 收到以下错误。

参数类型“SDKLoggingBehavior?” 不符合预期的“序列”类型

在线的

返回集(行为)

我已经使用 cocoapods 安装了最新的 FBSDK。

我将如何解决这个问题,还是等待来自 FB 的更新 SDK?

extension SDKSettings {
      /**
       Current logging behaviors of Facebook SDK.
       The default enabled behavior is `.DeveloperErrors` only.
       */
      public static var enabledLoggingBehaviors: Set<SDKLoggingBehavior> {
        get {
          let behaviors = FBSDKSettings.loggingBehavior().flatMap { object -> SDKLoggingBehavior? in
            if let value = object as? String {
              return SDKLoggingBehavior(sdkStringValue: value)
            }
            return nil
          }
          return Set(behaviors)
        }
        set {
          let behaviors = newValue.map({ $0.sdkStringValue })
          FBSDKSettings.setLoggingBehavior(Set(behaviors))
        }
      }

      /**
       Enable a particular Facebook SDK logging behavior.

       - parameter behavior: The behavior to enable
       */
      public static func enableLoggingBehavior(_ behavior: SDKLoggingBehavior) {
        FBSDKSettings.enableLoggingBehavior(behavior.sdkStringValue)
      }

      /**
       Disable a particular Facebook SDK logging behavior.

       - parameter behavior: The behavior to disable.
       */
      public static func disableLoggingBehavior(_ behavior: SDKLoggingBehavior) {
        FBSDKSettings.disableLoggingBehavior(behavior.sdkStringValue)
      }
    }
}
4

8 回答 8

14

这已在最新版本 0.3.1(截至 2018 年 6 月 8 日)中得到修复。

老答案:

这在最新的 master 中已修复,但在最新的标签或 Cocoapod 版本中未修复。

要使用它,请直接从Swift SDK repo将 master 分支中的代码克隆到您的项目中,或者将您的 podfile 更改为指向 master:

pod 'FacebookCore', :git => 'https://github.com/facebook/facebook-sdk-swift', :branch => 'master'

可以在此处找到修复此问题的拉取请求。

于 2018-06-06T21:31:42.507 回答
9

添加到@JAL 的答案:

对我来说,安装 pod 仍然给我版本0.3.0

用最新版本号修改PodFile给了我最新的 sdk

  pod 'FacebookCore','0.5.0'
  pod 'FacebookLogin','0.5.0'
  pod 'FacebookShare','0.5.0'
于 2018-10-21T09:04:03.043 回答
3
  1. 将部署目标设置为 11.0(在项目和 Podfile 中)
  2. 做'pod repo update'
  3. 如下更新您的 Podfile:

    pod 'FacebookCore', :git => ' https://github.com/facebook/facebook-sdk-swift ', :branch => 'master'

    pod 'FacebookLogin', :git => ' https://github.com/facebook/facebook-sdk-swift ', :branch => 'master'

    pod 'FacebookShare', :git => ' https://github.com/facebook/facebook-sdk-swift ', :branch => 'master'

于 2018-09-24T09:06:19.030 回答
1

改用这个

Change flatMap to compactMap
于 2018-09-24T15:53:01.177 回答
1

在 xcode 10 中。这对我有用。

1. change the iOS version 11.0
2. for swift 4.2 replace flatMap() to compactMap()
3. delete the derived data of project.
4. clean and run the project on simulator


Change flatMap to compactMap

希望能帮助到你

于 2018-10-11T06:20:22.717 回答
0

只需更新您的 pod,它对我来说工作正常

  1. 打开终端并设置项目路径
  2. 'pod repo 更新'
  3. 部署目标 11.0 或更高版本
于 2018-09-25T09:07:52.503 回答
0

在此处输入图像描述 我在以下代码中遇到错误

 get {
      let createBehavior = { (object: AnyHashable) -> SDKLoggingBehavior? in
        if let value = object as? String {
          return SDKLoggingBehavior(sdkStringValue: value)
        }
        return nil
      }

     #if swift(>=4.1)
         //line of error
            let behaviors: [SDKLoggingBehavior] = FBSDKSettings.loggingBehaviors.compactMap(createBehavior)
          #endif
          #else
          let behaviors: [SDKLoggingBehavior] = FBSDKSettings.loggingBehaviors.flatMap(createBehavior)
          #endif

我将代码更改为

 let behaviors: [SDKLoggingBehavior] = (FBSDKSettings.loggingBehaviors?.compactMap({ (object) -> SDKLoggingBehavior? in
            if let value = object as? String {
                return SDKLoggingBehavior(sdkStringValue: value)
            }
            return nil
        })) ?? []

为我解决了问题。

于 2019-04-24T13:42:14.773 回答
0

如果您正在使用带有 Swift 4.2 的 Xcode 10,请确保同时使用两者

pod 'FacebookLogin', '0.5.0'
pod 'FacebookCore', '0.5.0'

如果你只使用

pod 'FacebookLogin', '0.5.0'

它将自动安装不支持的 FacebookCore -> 0.6.0。

于 2019-07-07T09:52:39.107 回答