方法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"); } }
所以……不要。 即使文件另有说明。