博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态库制作-混编(工程是oc为基础)
阅读量:5156 次
发布时间:2019-06-13

本文共 1124 字,大约阅读时间需要 3 分钟。

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

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

首先,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

你可能感兴趣的文章
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
Hibernate主键生成策略
查看>>
Crushing Machinery - Strong Support of Cement Enterprise
查看>>
AsyncTask
查看>>
Django框架(十九)—— drf:序列化组件(serializer)
查看>>
JS一些概念知识及参考链接
查看>>
关于JS中&&和||用法技巧
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>
内部元素一一相应的集合的算法优化,从list到hashmap
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>
SpringMVC-处理AJAX
查看>>
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>