1. swift与动态库依赖
在我尝试用swift桥接使用一个OC的库的时候,出现了下列问题

但是删除公司自行开发的存储常用第三方静态库包的源之后重新执行pod install 成功了?这是为什么呢?原因其实很简单,因为实际项目中使用use_frameworks!强制以动态库形式pod依赖库,但是因为我使用的源中其实第一监测到的是静态库,所以就报错了。【注】使用swift开发时, pod第三方库的时候要注意对于静态库的依赖
2. 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形式访问,所以这时实际上是访问不到资源图片的,就导致了图片显示异常,这怎么破?
- podfile文件中注释掉use_frameworks!使用静态库方式pod第三方库,搭配mainbundle路径访问方法即可正常访问

2.修改第三方库中的资源加载方式为相对路径加载,不依赖于默认的mainbundle路径,但是这种方法需要实际相对路径,较为繁琐,还是不太推荐的【这也提醒我们,在自己封装SDK时需要考虑到这个库可能会被外部以.framework或者.a包引用,这种时候两者的bundle路径是不一样的,所以再自己封装SDK中自己取资源文件的时候需要特别注意,不应该死板的以mainbundle为依照,而是要以例如自身SDK项目中的某一文件未依照,从而获取SDK对应的bundle路径】
例如:

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


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


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

网友评论