静态库制作-混编(工程是oc为基础)
最近工作需要,需要制作一些静态库。由于缺乏经验,特意找了一些资料,加上自己的测试。特意在此记录一些心得和踩过的坑。所谓“好记性不如烂笔头”,希望自己以后忘记的时候能回头来看看,同时也希望对后来者能提供一定的帮助。
这里,我只写对我来说是难点的地方。
首先,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为基础)相关推荐
- bazel 链接第三方动态库_Linux 动态库与静态库制作及使用详解
Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 Linux 版本下不兼容的问题: 2)在 Linux 静态库的制作过程中发现有别于 Windo ...
- 技巧:Linux 动态库与静态库制作及使用详解
http://www.ibm.com/developerworks/cn/linux/l-cn-linklib/ 技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用 ...
- Win10+vs2013+Caffe静态库配置自己的工程
Win10+vs2013+Caffe静态库配置自己的工程 转载请注明原出处:http://blog.csdn.net/ouyangfushu/article/details/79450501 作者:S ...
- C语言 静态库制作(亲测可行)
文章目录 静态库简介 静态库制作 代码实现 创建静态库 链接使用静态库 静态库简介 静态库的本质就是将多个目标文件打包成一个库文件.链接静态库就是将库中被调用代码复制到可执行文件中.使用了静态库的可执 ...
- Linux gcc编译过程及动态/静态库制作
Linux库概念及如何制作静态库和动态库 1: gcc编译的过程 2: 分文件编程 3: 库(静态库和动态库) 3.1: 库的基本介绍 3.2: 静态和动态库的区别 3.3: 库的制作及使用 3.3. ...
- Linux下动态库和静态库制作与调用
Linux下动态库和静态库制作与调用 1.动态库和静态库简介 静态库是指在应用中,有一些公共代码需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所 ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- iOS 静态库制作,Framework制作,Bundle制作
在上一篇教程(中译版)中,你学到了怎么样创建一个可复用的圆形旋钮控件.然而你可能不清楚怎样让其他开发者更方便地去复用它. 如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法 ...
- iOS架构-制作静态库.a和.framework 的相互依赖(10)
有一句名言:当你知道的东西越多,你才会发现你不懂的东西越多. 现在我有点体会到了,当我去了解静态库,我发现我要学习脚本:当我接触编译C/C++库,我发现我要去了解交叉编译:当我想了解组件化架构,我发现 ...
最新文章
- idea自动捕获_Smilefie:如何通过检测微笑来自动捕获自拍
- 超越AlphaZero,DeepMind新算法MuZero登顶Nature | AI日报
- weblogic10重置控制台密码
- 肝!22款超好用的CLI工具
- leetcode945. 使数组唯一的最小增量(排序)
- java连接sql数据库代码_Java如何连接Sql的数据库
- MYSQL获取同时关注了某两个(或者N个)用户的用户
- SpringMvc之参数绑定注解详解之一
- Excel中如何引用 「文件名」、「sheet 页」的名字
- Cesium.js学习第二天(立方体)
- MySQL — 创建表,插入数据,更新数据,删除数据
- 雷塞控制器SMC304简单介绍
- 《左耳听风》-ARTS-打卡记录-第九周
- 艾伦·凯与Smalltalk语言
- js折线图设置y轴刻度_d3.js实现自定义多y轴折线图
- 先科n612打不开但是充电还是会亮红灯
- viso画图如何调整尺寸大小及设置打印【viso使用技巧篇】
- python多线程下载(荣耀)photo
- gen8服务器系统,gen8 服务器 bios 设置
- 超星集团武汉研发中心面试题
热门文章
- 服务器win7internet协议议,主编细说win7系统internet协议在哪、添加TCPIP协议的操作方法...
- 实数在java中的表示,java - 如何在Z3(Java)中从模型中获取实数值作为小数(双精度)? - SO中文参考 - www.soinside.com...
- 自学前端一般几年可以精通,找个差不多的工作?
- 简述中断处理的6个步骤_微机原理67章答案
- 计算机网络自上而下影印版_《计算机网络(影印版)》 影印 【正版电子纸书阅读_PDF下载】- 书问...
- java esc的_如何用Java中的Receipt打印机和ESC / POS命令提高速度
- java mongocollection_MongoDb完结笔记-与java结合
- pcap封包修改服务器数据,tcprewrite批量修改pcap数据报文
- python定义一个函数列表排序_Python 列表(修改、添加、删除、排序)
- nginx php 扩展,源码安装Nginx+PHP-FPM及扩展