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

Себ*_*кий 39 ios swift xcode6.3

在Xcode更新之后,编译器开始在工作代码上抛出错误(这两个函数都在AppDelegate.swift中).

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

有错误:

/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
}
Run Code Online (Sandbox Code Playgroud)

有错误

/Users/../AppDelegate.swift:25:11:Objective-C方法'应用程序:openURL:sourceApplication:annotation:'由方法提供'应用程序(:openURL:sourceApplication:annotation :)'与可选需求方法'应用程序冲突协议'UIApplicationDelegate'中的(:openURL:sourceApplication:annotation :)'

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

kbp*_*ius 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中删除了optional(annotation: AnyObject?)并使它成为(annotation: AnyObject).


Ren*_*cio 24

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

"launchOptions:NSDictionary?" 已成为"launchOptions:[NSObject:AnyObject]?"

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

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 5

您还应该确保使用正确的类型.使用String而不是NSString.