web-dev-qa-db-ja.com

Objective-Cメソッドは、オプションの要件メソッドと競合しますSwift

Xcodeの更新後、コンパイラーは作業コードでエラーをスローし始めました(両方の関数がAppDelegate.Swiftにあります)。

func application(application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool 
{
    FBLoginView.self
    FBProfilePictureView.self
    return true
}

エラーあり:

/Users/../AppDelegate.Swift:14:11:Objective-Cのメソッド 'application:didFinishLaunchingWithOptions:'は、メソッド 'application(:didFinishLaunchingWithOptions :)'がオプションの要件メソッド 'application(と競合しています:didFinishLaunchingWithOptions :) 'プロトコル' UIApplicationDelegate '

そして二番目

func application(application: UIApplication,        
                            openURL url: NSURL,
                            sourceApplication: NSString?,
                            annotation: AnyObject) -> Bool {
    var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication as! String)
    return wasHandled
}

エラーあり

/Users/../AppDelegate.Swift:25:11:メソッド 'application(:openURL:sourceApplication:annotation :)'によって提供されるObjective-Cメソッド 'application:openURL:sourceApplication:annotation:'はオプションと競合しますプロトコル「UIApplicationDelegate」の要件メソッド「application(:openURL:sourceApplication:annotation :)」

この2つの機能を何らかの形で1つにまとめるようにしてください。 6.2で機能したにもかかわらず、6.3でこのコードが突然機能しなくなった理由はわかりません。

コンパイラがエラーをスローしている理由は正確にはわかりませんが、デフォルトのSwift=同じメソッドのバージョンに違いがあります。関数宣言を、通常のSwiftプロジェクト:

1

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool

2

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool

メソッドの宣言を上記のものに置き換えて、コンパイルできるかどうかを確認することをお勧めします。


編集1(9/21/2015):これらがXcode 7のパブリックリリースの最新版であることを確認しました。オプション(annotation: AnyObject?)そしてそれを作りました(annotation: AnyObject)、宣言#2で

76
kbpontius

launchOptionsdidFinishLaunchingWithOptions関数のパラメーターのタイプは、XCode 6.3で変更されました。

「launchOptions:NSDictionary?」 「launchOptions:[NSObject:AnyObject]?」になりました

関数ヘッダーを次のように変更するだけです:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
24
Renato Ignacio

また、正しいタイプを使用していることを確認する必要があります。 NSStringの代わりにStringを使用します。

5
Andy

Xcode補完からそのメソッドを再度オーバーライドしてください。私のために働いた。

2
Isham

launchOptionsが変更されました。 「launchOptions:NSDictionary?」を変更してみてください「launchOptions:[NSObject:AnyObject]?」

お役に立てれば!

0
Reoxy