Method load() defines Objective-C class method 'load', which is not permitted by Swift 1.2

前端 未结 5 1567
一个人的身影
一个人的身影 2020-12-03 02:56

I\'m using Parse and I\'m creating a PFObject subclass conforming to the protocol PFSubclassing! It was working all fine, but now I\'m using Swift 1.2 and it gives me this

5条回答
  •  执笔经年
    2020-12-03 03:30

    There is an NSHispster article about method swizzling that touches on this in different context:

    Unfortunately, a load class method implemented in Swift is never called by the runtime, rendering that recommendation an impossibility. Instead, we're left to pick among second-choice options:

    • Implement method swizzling in initialize. This can be done safely, so long as you check the type at execution time and wrap the swizzling in dispatch_once (which you should be doing anyway).

    • Implement method swizzling in the app delegate. Instead of adding method swizzling via a class extension, simply add a method to the app delegate to be executed when application(_:didFinishLaunchingWithOptions:) is called. Depending on the classes you're modifying, this may be sufficient and should guarantee your code is executed every time.

    Link: http://nshipster.com/swift-objc-runtime/

    -

    More info form dev forums:

    Swift 1.1 allowed you to define "+load" methods with "class func load()", but they were not actually run at startup time of your app like Objective-C +load methods are. Swift 1.2 bans them to avoid the impression that this might work.

    Link: https://devforums.apple.com/message/1102025#1102025

    -

    tl;dr initialize() and didFinishLaunchingWithOptions seem to be decent places for such things in Swift.

提交回复
热议问题