小编典典

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

swift

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

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

有错误:

/Users/../AppDelegate.swift:14:11:方法“ application(
:didFinishLaunchingWithOptions :)” 提供的Objective-C方法“
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:’
与可选的需求方法’application冲突( :openURL:sourceApplication:annotation
:)’在协议’UIApplicationDelegate’中

我了解我很可能希望您以某种方式将这两个功能整合在一起。我不明白为什么该代码突然在6.3中停止工作,尽管事实在6.2中起作用。


阅读 244

收藏
2020-07-07

共1个答案

小编典典

我不确定为什么编译器会引发错误,但是我确实看到这些方法的默认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公开发布的最新信息。 他们在声明#2中删除了可选(annotation: AnyObject?)并使其成为(annotation: AnyObject)。

2020-07-07