OC调用Swift编写的framework

2017-10-18  本文已影响669人  龙猫六六

framework的Headers文件夹

xcode新建工程选择Cocoa Touch Framework类型


1.jpg

编码语言选择swift


1

置此完成由swift编写的framework

头文件的暴露


1.jpg

framewrok的作用就是避免源码暴露给调用者,只开放想要开放的文件/接口。
文件暴露:target->BuildPhase->Headers->Public;将需要暴露的文件添加到上述路径,framwork就会暴露该文件

swift framework在oc的兼容性

swift编写的framwork在oc工程能被正常使用,如下述代码需要注意以下几点:

public class CustomClass: NSObject {
   @objc
    public init(view: UIView) {
    }
}

1.自定义CustomClass类为public
2.自定义CustomClass类继承NSObject
3.自定义CustomClass类的public需要标明@objc关键字

验证方法
查看对应的xxx.framework对应的xxx-Swift.h(xxx.framework->Headers->xxx-Swift.h),验证暴露的方法是否存在于xxx-Swift.h
ClassName类中有定义了4个方法,差异在于public,@objc两个关键字
ClassName.swift

//@objc+ public
    @objc
    public func myMethod1(par:Int)-> Int{
        return par
    }
//public 
    public func myMethod2(par:Int)-> Int{
        return par
    }
//@objc+ private
     @objc
    private func myMethod3(par:Int)-> Int{
        return par
    }
//private   
    private func myMethod4(par:Int)-> Int{
        return par
    }

xxx-Swift.h

SWIFT_CLASS("_TtC17ProjectName10ClassName")
@interface ClassName : NSObject <CALayerDelegate>
- (NSInteger)myMethod1WithPar:(NSInteger)par SWIFT_WARN_UNUSED_RESULT;
@end

说明:
1."_TtC17ProgectName10ClassName":工程名ProgectName+类名ClassName,一般以这种组织形式表明对应的类为公开类,对调用者开放
2.只有@objc+ public两个关键字的方法才会被暴露
3.framework中定义的方法名,在oc中可能会发生变化,但可在xxx-Swift.h确认最终的方法名

OC中framework使用

模式选择

1.framework的添加
a.调试模式:将framework target放在app target同一个workpalce,然后在wrokplace中的build中找到对应的xxx.framework待后续使用。
特点:便于调试
b.非调试模式:将xxx.framework拖入到app target的工程中。
特点:无法调试

app target的xx.frmaework环境配置

路径:
1.app traget -> general->embedded binaries 添加目标framework
2.linked frameworks and libraries 添加目标framework

1.jpg

app target代码中使用

1.头文件声明
如下,xcode不会有联想提示,需要手动输入

#import "ProjectName/ProjectName-Swift.h"

2.方法调用
直接调用ProjectName-Swift.h中声明的类方法/实例方法

[[ClassName alloc] initWithView:self.window];

注意:
编译过程中会提示动态库文件找不到,“image not fund”,
可以通过切换“Aways Embed Swift Standard Libraries”的设置

上一篇 下一篇

猜你喜欢

热点阅读