我正在使用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 :)时将方法添加到要执行的应用程序委托中即可。根据您要修改的类,这可能就足够了,并且应确保每次都执行您的代码。
不幸的是,运行时从未调用过在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中似乎是个不错的地方。
initialize()
didFinishLaunchingWithOptions