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)
}
}
}
これは、最新リリースの0.3.1(2018年6月8日現在)で修正されています。
古い答え:
これは最新のマスターでは修正されていますが、最新のタグやCocoapodリリースでは修正されていません。
これを使用するには、マスターブランチのコードを Swift SDK repo からプロジェクトに直接クローンするか、マスターを指すようにポッドファイルを変更します。
pod 'FacebookCore', :git => 'https://github.com/facebook/facebook-sdk-Swift', :branch => 'master'
この問題を修正したプルリクエストは here にあります。
@ JAL's answerに追加:
私にとっては、ポッドをインストールしてもバージョン0.3.0
PodFile
を最新のバージョン番号で変更すると、最新のSDKが提供されます
pod 'FacebookCore','0.5.0'
pod 'FacebookLogin','0.5.0'
pod 'FacebookShare','0.5.0'
Podfileを次のように更新します。
ポッド 'FacebookCore'、:git => ' https://github.com/facebook/facebook-sdk-Swift '、:branch => 'master'
ポッド 'FacebookLogin'、:git => ' https://github.com/facebook/facebook-sdk-Swift '、:branch => 'master'
ポッド 'FacebookShare'、:git => ' https://github.com/facebook/facebook-sdk-Swift '、:branch => 'master'
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
それが役に立てば幸い
Change flatMap to compactMap
ポッドを更新するだけで問題なく動作します
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
})) ?? []
私の問題を修正しました。
Swift 4.2でXcode 10を使用している場合は、必ず両方を使用してください
pod 'FacebookLogin', '0.5.0'
pod 'FacebookCore', '0.5.0'
使用する場合のみ
pod 'FacebookLogin', '0.5.0'
FacebookCore-> 0.6.0が自動的にインストールされますが、サポートされていません。