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

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

首先,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互调的问题就写完了。后续如果还会有其它方面的问题,到时候再更新。

转载于:https://www.cnblogs.com/chendingxin/p/11108386.html

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

  1. bazel 链接第三方动态库_Linux 动态库与静态库制作及使用详解

    Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 Linux 版本下不兼容的问题: 2)在 Linux 静态库的制作过程中发现有别于 Windo ...

  2. 技巧:Linux 动态库与静态库制作及使用详解

    http://www.ibm.com/developerworks/cn/linux/l-cn-linklib/ 技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用 ...

  3. Win10+vs2013+Caffe静态库配置自己的工程

    Win10+vs2013+Caffe静态库配置自己的工程 转载请注明原出处:http://blog.csdn.net/ouyangfushu/article/details/79450501 作者:S ...

  4. C语言 静态库制作(亲测可行)

    文章目录 静态库简介 静态库制作 代码实现 创建静态库 链接使用静态库 静态库简介 静态库的本质就是将多个目标文件打包成一个库文件.链接静态库就是将库中被调用代码复制到可执行文件中.使用了静态库的可执 ...

  5. Linux gcc编译过程及动态/静态库制作

    Linux库概念及如何制作静态库和动态库 1: gcc编译的过程 2: 分文件编程 3: 库(静态库和动态库) 3.1: 库的基本介绍 3.2: 静态和动态库的区别 3.3: 库的制作及使用 3.3. ...

  6. Linux下动态库和静态库制作与调用

    Linux下动态库和静态库制作与调用 1.动态库和静态库简介   静态库是指在应用中,有一些公共代码需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所 ...

  7. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  8. iOS 静态库制作,Framework制作,Bundle制作

    在上一篇教程(中译版)中,你学到了怎么样创建一个可复用的圆形旋钮控件.然而你可能不清楚怎样让其他开发者更方便地去复用它. 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法 ...

  9. iOS架构-制作静态库.a和.framework 的相互依赖(10)

    有一句名言:当你知道的东西越多,你才会发现你不懂的东西越多. 现在我有点体会到了,当我去了解静态库,我发现我要学习脚本:当我接触编译C/C++库,我发现我要去了解交叉编译:当我想了解组件化架构,我发现 ...

最新文章

  1. idea自动捕获_Smilefie:如何通过检测微笑来自动捕获自拍
  2. 超越AlphaZero,DeepMind新算法MuZero登顶Nature | AI日报
  3. weblogic10重置控制台密码
  4. 肝!22款超好用的CLI工具
  5. leetcode945. 使数组唯一的最小增量(排序)
  6. java连接sql数据库代码_Java如何连接Sql的数据库
  7. MYSQL获取同时关注了某两个(或者N个)用户的用户
  8. SpringMvc之参数绑定注解详解之一
  9. Excel中如何引用 「文件名」、「sheet 页」的名字
  10. Cesium.js学习第二天(立方体)
  11. MySQL — 创建表,插入数据,更新数据,删除数据
  12. 雷塞控制器SMC304简单介绍
  13. 《左耳听风》-ARTS-打卡记录-第九周
  14. 艾伦·凯与Smalltalk语言
  15. js折线图设置y轴刻度_d3.js实现自定义多y轴折线图
  16. 先科n612打不开但是充电还是会亮红灯
  17. viso画图如何调整尺寸大小及设置打印【viso使用技巧篇】
  18. python多线程下载(荣耀)photo
  19. gen8服务器系统,gen8 服务器 bios 设置
  20. 超星集团武汉研发中心面试题

热门文章

  1. 服务器win7internet协议议,主编细说win7系统internet协议在哪、添加TCPIP协议的操作方法...
  2. 实数在java中的表示,java - 如何在Z3(Java)中从模型中获取实数值作为小数(双精度)? - SO中文参考 - www.soinside.com...
  3. 自学前端一般几年可以精通,找个差不多的工作?
  4. 简述中断处理的6个步骤_微机原理67章答案
  5. 计算机网络自上而下影印版_《计算机网络(影印版)》 影印 【正版电子纸书阅读_PDF下载】- 书问...
  6. java esc的_如何用Java中的Receipt打印机和ESC / POS命令提高速度
  7. java mongocollection_MongoDb完结笔记-与java结合
  8. pcap封包修改服务器数据,tcprewrite批量修改pcap数据报文
  9. python定义一个函数列表排序_Python 列表(修改、添加、删除、排序)
  10. nginx php 扩展,源码安装Nginx+PHP-FPM及扩展