swift-bridge时遇到的一些小坑记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift-bridge时遇到的一些小坑记录相关的知识,希望对你有一定的参考价值。

参考技术A 在我尝试用swift桥接使用一个OC的库的时候,出现了下列问题

但是删除公司自行开发的存储常用第三方静态库包的源之后重新执行pod install 成功了?这是为什么呢?原因其实很简单,因为实际项目中使用use_frameworks!强制以动态库形式pod依赖库,但是因为我使用的源中其实第一监测到的是静态库,所以就报错了。【注】使用swift开发时, pod第三方库的时候要注意对于静态库的依赖

动态库依附

如果你使用普通mainbundle的path方法获取的话会发现获取不到对应资源文件,这是为什么呢?因为swift的pod文件使用use_frameworks!限制了cocoapods将第三方库以动态库形式管理,那么就注定了直接使用mainbundle-path是访问不到的

解决方案参考 here :也就是路径拼接的最后结果是aaaaaa项目/Frameworks/库名.framework/bundle名.bundle,如果库名和bundle一致为bbb的话,那就是aaaaaa项目/Frameworks/bbb.framework/bbb.bundle

其实可以通过查看项目实际运行地址打开包内容查看具体路径

但是又有一个新问题,因为SDK内部使用SDK本身资源图片是使用的mainbundle-path形式访问,所以这时实际上是访问不到资源图片的,就导致了图片显示异常,这怎么破?

在swif中使用OC的枚举值,直接书写枚举值是错误的,如下例子所示:

标注1直接使用枚举值会报错未定义,这个时候应该使用标注2的形式 枚举名称.枚举值,需注意这里的枚举值是去掉了枚举定义重复部分的值,例如WYLoginStepType.loginAccount在枚举的实际定义中为WYLoginStep_loginAccount,而调用时是去除了与枚举名称中重复的部分(若重复部分后序为下划线则下划线也去除)WYLoginStep_,而直接使用.loginAccount进行调用的

因为实际上swift帮你生成了一个临时文件来存储这些枚举值:

另外从上述两个例子中也可以验证:此文件中的枚举值符合上述去除了与枚举名称中重复的部分(若重复部分后序为下划线则下划线也去除)这一规则。

jquery事件委托遇到的小坑记录

 

<script type="text/javascript" src="../../lib/jquery-1.11.2.min.js"></script>

 

$(document).on(‘click‘,"li", function() {
    //do something
});

  这样的写法,在pc,安卓上都是木有问题的,但在苹果手机,平板上就没有效果,

  改成:

$("div#id").on(‘click‘,"li", function() {
    //do something
});

  就没有问题,

  想不通是什么原因,做下记录,希望能帮助到遇到同样问题的人,

  有大牛能解释一下原因就更好了.

以上是关于swift-bridge时遇到的一些小坑记录的主要内容,如果未能解决你的问题,请参考以下文章

Asp-Net-Core开发笔记:在docker部署时遇到一个小坑

left join一些小坑

Vue遇到的一些小坑

jquery事件委托遇到的小坑记录

关于sniff函数的一个小坑

今天写测试代码时遇到的小坑