美文网首页
iOS项目中 Swift和OC混编问题记录

iOS项目中 Swift和OC混编问题记录

作者: 猴子的饼干 | 来源:发表于2019-04-26 15:27 被阅读0次

    本篇主要用于记录在混编过程中遇到的问题

    CocoaPods

    新建了一个测试项目,OC与Swift混编环境,原始Podfile文件如下

    source 'https://github.com/Cocoapods/Specs.git'
    platform :ios, '9.0'
    inhibit_all_warnings!  # 忽略警告
    use_frameworks!       
    
    abstract_target 'BASE_POD' do
        pod 'SDWebImage'
        pod 'Kingfisher', '~> 5.0.1'
    
        target 'CocoaPodsTest' do 
        end
    end
    
    Pods install时 爆出 ”CocoaPods could not find compatible versions for pod "Kingfisher"(Specs satisfying the Kingfisher (~> 5.0.1) dependency were found, but they required a higher minimum deployment target.)“

    原因1:
    pod 指定的iOS版本低于Kingfisher的最低版本,kingfisher5.0.1要求最低版本为iOS10, Swift4。
    解决办法1:
    将pod的最低版本修改为10.0 (修改部分: platform :ios, '10.0')

    原因2:
    类似的报错可能是因为 pod repo 版本过低。
    解决办法2:
    更新 repo (终端命令: pod repo update)

    Swift 调用 OC

    描述:
    我们在OC项目中创建Swift类时,系统会自动创建桥接文件,名称类似于“XXXXXX-Bridging-Header.h”(其中XXXXXX为工程名称)。该桥接文件的作用是将需要使用到的OC文件桥接给Swift。
    解决办法:
    在桥接文件中,将Swift需要使用到的OC文件包含进来。(例如: #import <SDWebImage/UIImageView+WebCache.h>), 包含后就可以在所有Swift文件里调用所包含的OC文件了。
    Tips:
    若先前在自动创建桥接文件时选择了“不创建”,那就需要手动创建桥接文件了。新建个Header(.h)文件,在"Buid Setting -> Objective-C Bridge Header"下填上自己创建的桥接文件路径(路径可以直接拖文件转换成路径,也可以使用$(SRCROOT)/XXXXX/XXXX 等命令)

    OC 调用 Swift

    描述:
    Swift调用OC有桥接文件从中协调,那么OC调用Swift也是类似的。每当我们在混编项目中创建Swift文件时,会自动将我们创建的Swift文件包含到一个名为“XXXXXX-Swift.h”文件中,该文件是隐藏的,我们可以在"Buid Setting -> Objective-C Generated Interface Header Name"看到其存在。
    解决办法:
    在需要调用到Swift的OC文件中 引入“XXXXXX-Swift.h”文件,我们可以进入该文件看到其具体的桥接内容。
    Tips:
    因为Swift的程序在编译期就已经确定了函数的调用情况,会压缩掉未使用的方法。在OC调用Swift时,Swift文件内需要在使用到的方法、属性的声明前加上 @objc 来表明该属性或方法会在OC中使用到。我们也能够看到当我们加上 @objc 后,在桥接文件“XXX-Swift.h”文件中也引入了对应的属性和方法说明。
    在本文中使用到的 Kingfisher ,其作者在Github上反馈道“因使用到了部分非NSOjbect的东西,所以无法兼容OC使用。“

    未完.......

    相关文章

      网友评论

          本文标题:iOS项目中 Swift和OC混编问题记录

          本文链接:https://www.haomeiwen.com/subject/kwrtmqtx.html