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

方法load()定义了Objective-C类方法“加载”,Swift 1.2不允许这样做

朱高超
2023-03-14
问题内容

我正在使用Parse,并且正在创建一个符合PFSubclassing协议的PFObject子类!一切正常,但是现在我使用的是Swift
1.2,它给了我这个错误:

1. override class func load() {
2.      self.registerSubclass()
3. }

在第1行上:方法“ load()”定义了Objective-C类方法“加载”,Swift 1.2不允许这样做

有人有这个问题吗?我该如何解决?


问题答案:

NSHispster上有一篇关于方法混乱的文章,它在不同的上下文中涉及到此:

不幸的是,运行时从未调用过在Swift中实现的加载类方法,从而使该建议成为不可能。相反,我们只能选择第二种选择:

  • 实现初始化中的方法。
    只要您在执行时检查类型并将所有问题包装在dispatch_once中(无论如何您都应该这样做),就可以安全地完成此操作。

  • 在应用程序委托中实现方法混乱。
    无需通过类扩展添加麻烦的方法,只需在调用application(_:didFinishLaunchingWithOptions
    :)时将方法添加到要执行的应用程序委托中即可。根据您要修改的类,这可能就足够了,并且应确保每次都执行您的代码。

链接:http://nshipster.com/swift-
objc-runtime/

--

来自开发者论坛的更多信息:

Swift 1.1允许您使用“类func load()”定义“ + load”方法,但它们实际上并没有像Objective-C +
load方法那样在您的应用启动时运行。Swift 1.2禁止它们避免这种效果的印象。

链接:https://devforums.apple.com/message/1102025#1102025

--

tl; dr initialize()didFinishLaunchingWithOptions在Swift中似乎是个不错的地方。



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

  • 从Laravel开始,我在尝试发布到我的一个页面时遇到了一个问题。 我正在使用邮递员创建一个帖子请求到我的 /clock页面。 这篇文章发送了一个简单的Json,只有一个字段: 以下是邮报的标题: 我的路线当前位于路线/api中。php文件夹,并包含以下内容: 它链接到如下所示: 当我在邮递员执行后,这是我得到的错误:

  • 我有一个restcontroller和post方法,带有以下url和json请求。http://server/member/sc/v1/limited-liability/medicare 使用post方法和json请求在本地触发请求时,获得正确的响应。但在docker中以spring boot应用程序的形式运行会将异常作为不允许的方法抛出。最初,我将这个docker服务部署为put方法。现在我转

  • 我有一个非常简单的Spring引导应用程序,它由以下代码保护: 这个想法是为了保护“admin”部分。它公开了一个RESTAPI。问题是所有的帖子都被退回了 405方法不允许 如果我从应用程序中删除安全启动器,它就会工作。这让我相信安全配置是问题所在。但我不知道怎么做。

  • 相比之下,Java确实允许虚拟泛型方法。这里也清楚了如何实现:Java泛型在运行时被删除,因此泛型方法是运行时的常用方法,因此不需要修改。 但是现在到了C#。C#确实有具体化的泛型。对于具体化泛型,特别是当使用值类型作为类型参数时,泛型方法必须有不同的版本。但是我们遇到了与C++相同的问题:每当对泛型方法进行新的实例化时,我们都需要修改vtable。 我对C#的内部工作没有太深的了解,所以我的直觉

  • 问题内容: 我正在开发flask注册表格,但收到错误消息: 码: registration.html: 当我访问时,我收到错误消息。我究竟做错了什么? 问题答案: 这是因为在定义路由时仅允许POST请求。 当你在浏览器中访问时,它将首先执行GET请求。只有提交表单后,浏览器才会执行POST。因此,对于像你这样的自我提交表单,你需要同时处理两者。 使用 应该管用。