Swift和Objective-C注意事项
一、Swift使用或者继承Objective-C
注意点: 1、在framework中,是没有办法使用这个桥接文件的,就算你生成了这个桥接文件,并且正确的配置了 Objective-C Bridging Header 路径,编译的时候会提示 “using bridging headers with framework targets is unsupported“ 错误。所以怎么在Swift中使用或者继承Objective-C文件呢?
排雷记录:Swift +Objective-C混合Framework的一些问题 2、在cocoapods中,如果要 Swift 继承 Objective-C 文件,会和上面的framework存在类似的问题:没有桥接文件。 解决方式:在cocoapods中,没有所谓的头文件,但是有了一个
编译会发现有另外一个问题:
这个报错的文件是 解决方式:既然是说找不到这个文件,我们便在cocoapods重新加上这个头文件,和第1个问题一样,设置它的访问权限为 Public。
当 SwiftSubClassPod 继承 ObjcSuperClassPod 时, // Generated by Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
#pragma clang diagnostic push
...
...
...
#import <HDTestPod/HDTestPod.h>
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
SWIFT_CLASS("_TtC9HDTestPod16SwiftSubClassPod")
@interface SwiftSubClassPod : ObjcSuperClassPod
+ (void)dosome;
- (void)instanceDosome;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
#pragma clang diagnostic pop
当 SwiftSubClassPod 继承 NSObject 时, // Generated by Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
#pragma clang diagnostic push
...
...
...
#if defined(__has_feature) && __has_feature(modules)
@import ObjectiveC;
#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
SWIFT_CLASS("_TtC9HDTestPod16SwiftSubClassPod")
@interface SwiftSubClassPod : NSObject
+ (void)dosome;
- (void)instanceDosome;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
#pragma clang diagnostic pop
上面两个问题对应的 Demo地址 二、Objective-C使用Swift
注意点: 1、如何找到这个系统生成的 这个文件虽然在工程中看不到,但是它时真实存在的,编译后,按住 command 点击
Xcode概览:在工作区窗口开发您的应用程序 2、 Objective-C 文件不能继承自定义的 Swift 类。 Swift and Objective-C in the Same Project 3、framework、cocoapods中的 Swift 文件,如果想被项目中使用或者继承,需要加上权限关键字: public: 可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。 open: 可以被任何人使用,包括override和继承。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |