Objective-C方法与可选的需求方法Swift冲突

时间:2015-02-11 17:20:02

标签: ios swift xcode6.3

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 :)提供'与可选的需求方法'应用程序冲突(<协议'UIApplicationDelegate'中的/ em>:didFinishLaunchingWithOptions :)'

第二次

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:Objective-C方法   'application:openURL:sourceApplication:annotation:'由method'应用程序提供(:openURL:sourceApplication:annotation :)'与可选的需求方法'application(:openURL:sourceApplication:annotation :)'冲突protocol'UIApplicationDelegate'

我明白我很可能希望你把这两个功能合二为一。我不明白为什么这个代码在6.3中突然停止工作,尽管它在6.2中工作。

5 个答案:

答案 0 :(得分:76)

我不确定编译器为什么会抛出错误,但是我确实看到了这些相同方法的默认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(2015年9月21日):我已经确认这些是Xcode 7公开发布的最新版本。他们在声明#2中删除了可选(annotation: AnyObject?)并制作了它(annotation: AnyObject)。

答案 1 :(得分:24)

didFinishLaunchingWithOptions 函数的 launchOptions 参数的类型在XCode 6.3中已更改:

&#34; launchOptions:NSDictionary?&#34;已成为&#34; launchOptions:[NSObject:AnyObject]?&#34;

只需更改您的函数标题即可匹配以下内容:

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

答案 2 :(得分:5)

您还应该确保使用的是正确的类型。使用字符串代替 NSString

答案 3 :(得分:2)

尝试再次从Xcode完成覆盖该方法。为我工作。

答案 4 :(得分:0)

launchOptions已被更改;尝试更换&#34; launchOptions:NSDictionary?&#34; to&#34; launchOptions:[NSObject:AnyObject]?&#34;

希望这有帮助!