方法load()定义了Objective-C类的方法'load',这是Swift 1.2不允许的

我正在使用Parse,并且正在创build一个符合协议PFSubclassing的PFObject子类! 它工作得很好,但现在我正在使用Swift 1.2,它给了我这个错误:

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

在第一行:方法'load()'定义了Objective-C类的方法'load',这是Swift 1.2不允许的

任何人都有这个问题呢? 我该如何解决?

有一个NSHispster关于方法swizzling的文章在不同的上下文中涉及到:

不幸的是,在Swift中实现的加载类方法永远不会被运行时调用,使得这个build议是不可能的。 相反,我们只能select第二select:

  • 在初始化中实现方法debugging。 这可以安全地完成,只要你在执行时检查types,并在dispatch_once中包装(你应该这样做)。

  • 在应用程序委托中实现方法调配。 而不是通过类扩展添加方法swizzling,只需在应用程序(_:didFinishLaunchingWithOptions :)被调用时将一个方法添加到应用程序委托中即可执行。 根据你正在修改的类,这可能是足够的,应该保证你的代码每次都被执行。

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

更多信息表dev开发论坛:

Swift 1.1允许你用“class func load()”来定义“+ load”方法,但是它们实际上并没有像Objective-C + load方法那样在启动时运行。 Swift 1.2禁止它们以避免这种情况发生。

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

tl; dr initialize()didFinishLaunchingWithOptions似乎是在Swift中这样的事情的体面的地方。

我在Parse.setApplicationId之前调用AppDelegate中的registerSubclass()方法为每个Parse.setApplicationId的子类,它的工作原理。

尝试这个 :

 override class func initialize() { var onceToken : dispatch_once_t = 0; dispatch_once(&onceToken) { self.registerSubclass() } } 

Parse文档已更新: https : //www.parse.com/docs/ios/guide#objects-subclassing-pfobject

我得到它的工作,取而代之的是:

 override class func initialize() { } 

重载load() 从来没有与斯威夫特工作。 更好的是,它根本不叫。 当时我为苹果公司提交了一个bug(Bug ID 18423731),最近我得到了一个答复,明确告知开发者这个问题在Swift中是不允许的。

 extension UIButton { // !! never called override public class func load() { // Method 'load()' defines Objective-C class method 'load', which is not permitted by Swift 1.2 super.load() println("not called earlier anyway"); } } 

所以……不要。 即使文件另有说明。