• swift与OC混编高级教程之混编框架的创建和调用


    首先创建一个project取个名字叫“MyMixed”,选择iOS-framework&library-cocoa touch framework

    然后在里面创建一个SwiftView.swift文件,一个objc的OCView文件和MyOCView文件三个文件都继承UIView
    首先在SwiftView里调用OCView

    import UIKit

     

    class SwiftView: UIView {

     

        init(frame: CGRect) {

            super.init(frame: frame)

            self.backgroundColor = UIColor.redColor()

            

            var ocView = OCView(frame:CGRectMake(0,0,50,50))

            self.addSubview(ocView)

        }

     

    }

     

    然后在MyOCView里调用SwiftView

    @implementation MyOCView

    - (instancetype)initWithFrame:(CGRect)frame

    {

        self = [super initWithFrame:frame];

        if (self) {

    self.backgroundColor = [UIColor grayColor];

            SwiftView *sView = [[SwiftView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

            [self addSubview:sView];

        }

        return self;

     

    }

     

    这时候编译是会出错的,因为不能互相找到路径,这个时候要在工程MyMixed的build settings-swift compiler-objective-才 bridging header里加入头文件路径MyMixed/OCView.h让SwiftView找到OCView.h

    然后在OCView.m里加入

    //工程名加上编译时会生成的一个名子,这样就可以使用swift文件

    #import "MyMixed/MyMixed-Swift.h"

    就能通过编译,这个时候混合框架就制作完成了

     

    再重新建一个工程叫MixPro这里我们使用swift语言

    然后add files to“。。。”导入框架的工程文件(当然也可以直接导入编译好的framework),然后编译一下框架工程,看是否能编译通过,然后在MixPro工程的build phases里点击link binary with libraries 添加MyMixed.framework,这个时候框架添加完成,编译看是否通过

    然后在viewcontroller里添加代码

    import UIKit

    import MyMixed

     

    class ViewController: UIViewController {

                                

        override func viewDidLoad() {

            super.viewDidLoad()

            // Do any additional setup after loading the view, typically from a nib.

            

            var swiftView = SwiftView(frame:CGRect(x:20, y:20, 100, height:100))

            self.view.addSubview(swiftView)

            

            var myocView = MyOCView(frame:CGRectMake(50,140,200,200))

            self.view.addSubview(myocView)

        }

     

        override func didReceiveMemoryWarning() {

            super.didReceiveMemoryWarning()

            // Dispose of any resources that can be recreated.

        }

     

    }

    这个时候会出错,原因是找不到MyOCView,因为我们在创建MyMixed工程的时候选择的swift,所以只有.swift文件才能在外部被看见
    我们点击MyMixed工程的MyMixed.h文件可以看见

    // In this header, you should import all the public headers of your framework using statements like #import

    不难明白如果要这个framework的其他文件被外部工程看见,我们需要#import 这个头文件,但是这个一定是PublicHeader.h所以我们点击MyMixed工程的build phases里的Headers,可以看见public里只有MyMixed.h,我们要想在外部使用MyOCView.h就要把它从project里拖到public里,然后重新编译,错误消除编译通过

  • 相关阅读:
    中小企业需要企业邮箱吗?中小性公司选什么邮箱性价比高?
    主流电子邮箱有哪些?你的邮箱选对了吗?
    外贸邮箱选择什么企业邮箱更安全?
    企业邮箱适用于哪些行业?公司邮箱都用什么?
    如何注册公司收费邮箱?注册公司邮箱有哪些优势?
    convert_cyr_string — 将字符由一种 Cyrillic 字符转换成另一种
    chunk_split — 将字符串分割成小块
    addslashes — 使用反斜线引用字符串
    addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符
    extract — 从数组中将变量导入到当前的符号表
  • 原文地址:https://www.cnblogs.com/er-dai-ma-nong/p/4885545.html
Copyright © 2020-2023  润新知