当前位置: 首页 > 面试题库 >

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

姚俊材
2023-03-14
问题内容

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中起作用。


问题答案:

我不确定为什么编译器会引发错误,但是我确实看到这些方法的默认Swift版本有所不同。也许您可以将函数声明替换为使用普通Swift项目创建的函数声明:

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)。



 类似资料:
  • 问题内容: 在Objective-C中,有一个称为的类方法,该方法在首次加载类时被调用。Swift中的等效项是什么? 问题答案: 在Swift 1.2之前: 编辑: 从Swift 1.2开始,您将无法再覆盖该方法。相反,查看该方法,它的行为与加载不同,它是在类第一次在某处而不是在应用程序初始加载时被调用的

  • 问题内容: 我开始学习Swift,并且一直在YouTube上观看斯坦福大学的精彩视频讲座。如果您有兴趣或有帮助,可以使用以下链接(尽管不需要了解我的问题): 使用Swift开发iOS 8应用-2。更多Xcode和Swift,MVC 在听完讲座之后,我发现(据我所知)我的代码与视频中的代码相同,但是在我的系统上,我遇到了编译器错误。经过大量的试验和错误,我设法将代码简化为两个示例,其中一个生成错误,

  • 问题内容: 我们正在尝试在Objective-C实现中引用swift方法。 Swift 3类: Objective-C的实现(Objective-cm): 问题答案: 如果在Xcode源文件编辑器中单击命令,则可以看到Swift方法如何映射到Objective-C。 在你的情况下 被称为 更好的Swift 3方法名称可能是 因为已经是第一个参数的参数(外部)名称。您还可以将一个属性添加到Swift

  • 问题内容: 我正在使用Parse,并且正在创建一个符合PFSubclassing协议的PFObject子类!一切正常,但是现在我使用的是Swift 1.2,它给了我这个错误: 在第1行上:方法“ load()”定义了Objective-C类方法“加载”,Swift 1.2不允许这样做 有人有这个问题吗?我该如何解决? 问题答案: NSHispster上有一篇关于方法混乱的文章,它在不同的上下文中涉

  • 主要内容:实例方法在Swift 4语言中,与特定类型关联的函数称为“方法”。 在Objective C中,类用于定义方法,而Swift 4语言为用户提供了为类,结构体和枚举也提供方法,提高了灵活性。 实例方法 在Swift 4语言中,通过实例方法访问类,结构体和枚举实例。 实例方法提供功能 - 访问和修改实例属性 与实例需求相关的功能 可以在花括号内写入实例方法。 它具有对类型实例的方法和属性的隐式访问。 当调用该

  • Swift 方法是与某些特定类型相关联的函数 在 Objective-C 中,类是唯一能定义方法的类型。但在 Swift 中,你不仅能选择是否要定义一个类/结构体/枚举,还能灵活的在你创建的类型(类/结构体/枚举)上定义方法。 实例方法 在 Swift 语言中,实例方法是属于某个特定类、结构体或者枚举类型实例的方法。 实例方法提供以下方法: 可以访问和修改实例属性 提供与实例目的相关的功能 实例方