美文网首页
$(SWIFT_MODULE_NAME)-Swift.h在哪里

$(SWIFT_MODULE_NAME)-Swift.h在哪里

作者: 猎手Andy | 来源:发表于2020-03-27 14:08 被阅读0次

带@objc的swift代码会生成对应的Objective-C的头文件,
实际上就是转译了的Objective-C代码

find ~/Library/Developer/Xcode/DerivedData/ProductName-eiiaidnlwwmavuhcaxaeacvcitjh/ -name "ProductName-Swift.h"

发现在这下面:
~/Library/Developer/Xcode/DerivedData/-eiiaidnlwwmavuhcaxaeacvcitjh//Build/Intermediates.noindex/ProductName.build/Debug-iphonesimulator/ProductName.build/DerivedSources

比如swift代码:

@objc func handleJSCall(options:Parameters) -> Bool 

翻译成:

- (BOOL)handleJSCallWithOptions:(NSDictionary<NSString *, id> * _Nonnull)options SWIFT_WARN_UNUSED_RESULT;

因此在
Objective-C直接调用的时候是这个样子的(注意方法名改变了):

SEL selector = NSSelectorFromString(@"handleJSCallWithOptions:");
        if ([viewController respondsToSelector:selector]) {
            IMP imp = [viewController methodForSelector:selector];
            void (*func)(id, SEL,NSDictionary *  ) = (void *)imp;
            func(viewController, selector, params);
        }

这是因为Swift的方法带了参数声明,如果忽略这个参数

@objc func handleJSCall(_ options:Parameters) -> Bool 

则不会自动转为 handleJSCallWithOptions:
这是OC的方法命名约定。

相关文章

网友评论

      本文标题:$(SWIFT_MODULE_NAME)-Swift.h在哪里

      本文链接:https://www.haomeiwen.com/subject/nhuluhtx.html