Got “is not a recognized Objective-C method” when bridging Swift to React-Native

前端 未结 3 1947
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-14 15:39

I\'m trying to bridge my React-Native 0.33 code to a super simple Swift method, following this guide but all I\'m getting is show:(NSString *)name is not a recognized

相关标签:
3条回答
  • 2020-12-14 16:13

    this worked for me in xcode 8.0 and swift 3

    @objc func openPresentedViewController(_ name: String,name1: String,name2: String){
    }
    

    add _ to non labelled members

    RCT_EXTERN_METHOD(methodName:(NSString *)name name1:(NSString *)name1 name2:(NSString *)name2)
    

    as you can see in the objective c method name is nonlabeled parameter add _ to it in the swift method

    0 讨论(0)
  • 2020-12-14 16:13

    I was fighting with this issue all day. Resolved by setting the Swift Compiler to use Legacy versions (XCode 8 is prefers Swift 3), so in:

    Build Settings > Scroll down to 'Use Legacy Swift Language Version' set as Yes.

    0 讨论(0)
  • 2020-12-14 16:19

    This is a part of Swift 3's changes and can be solved by adding an underscore:

    import Foundation
    
    @objc(SwitchManager)
    class SwitchManager: NSObject {
    
      @objc func show(_ name: String) {
        NSLog("%@", name);
      }
    
    }
    

    See Swift 3's 0046 Proposal: Establish consistent label behavior across all parameters including first labels that is called out in the Swift.org migration guide under "Consistent first argument labels".

    Basically, how Objective-C sees Swift methods has changed with Swift 3.

    EDIT: This is still the case in Swift 4, see docs here under Omitting Argument Labels.

    0 讨论(0)
提交回复
热议问题