码迷,mamicode.com
首页 > 其他好文 > 详细

静态库制作-混编(工程是oc为基础)

时间:2019-06-30 09:50:00      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:tin   map   init   文件   prot   margin   module   桥接   好用   

最近工作需要,需要制作一些静态库。由于缺乏经验,特意找了一些资料,加上自己的测试。特意在此记录一些心得和踩过的坑。所谓“好记性不如烂笔头”,希望自己以后忘记的时候能回头来看看,同时也希望对后来者能提供一定的帮助。

这里,我只写对我来说是难点的地方。

首先,framework是静态库。是用oc编写的。如果静态库制作好了,没问题的话,无论是放到oc项目还是swift项目,都不应该有问题。其中,swift与oc互调也不会有问题。难点在于,在编写framework的时候,如果framework本身是混编的话,如果让swift与oc能相互调用。这可能需要花点时间来了解与测试一下。

一:swift 调用 oc

    1:可以在unbrella文件中#iimport你的oc头文件。然后在swift中可以直接调用oc代码。因为framework不能直接写桥接文件。所以建立桥接文件是徒劳无用的。(unbrella文件就是建立framework时系统帮你自动建立的一个头文件。)

   2:可以借助modulemap文件。modulemap可以使文件模块化。关于modulemap的使用,可以自行百度。个人觉得使用modulemap使用范围较广,即可以在framework中使用,也可以在app工程中使用,还能取代桥接文件的作用。是个非常好用的功能。(注意:在使用时,在buildsetting中需要import Path)

技术图片

技术图片

二:oc调用swift

  这个坑我踩了好久。注意点如下。

  1:在app中oc调用swift都会#improt "工程名-Swift.h".后面可以直接调用swift代码。在framework中,如果想调用swift代码,需要#import <工程名/工程名-Swift.h>,如图

#import <DD/DD-Swift.h>

 2:#import之后,build一下,发现是成功的。但是当调用swift类时,发现要么找不到属性,要么找不到方法。为什么呢。我们可以点击上面我们#import的头文件。这个文件就是系统自动把swift的类转为oc类,然后供我们调用的。发现系统只转换了一个init方法,其它属性和方法都看不到。这就是为什么我们无法调用属性和方法的原因。如何修改呢。首先,swift的类需要继承NSObject,要不然,系统连init方法都不给你转。第二,你需要调用的方法和属性需要使用@objc修饰。如下图

技术图片

技术图片

到此为止,framework中swift与oc互调的问题就写完了。后续如果还会有其它方面的问题,到时候再更新。

静态库制作-混编(工程是oc为基础)

标签:tin   map   init   文件   prot   margin   module   桥接   好用   

原文地址:https://www.cnblogs.com/chendingxin/p/11108386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!