zoukankan      html  css  js  c++  java
  • [Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10681837.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    创建一个Swift项目【demo】,以下内容Swift文件和Objective-C文件相互调用都是在Swift项目中。

    一、Swift文件调用Objective-C文件

    新建文件夹【SupportFiles】->将OC文件拖入到文件夹中

    ->第一次导入OC文件会提示创建桥接头文件。原因:桥接文件路径为空。

    ->点击【Create Bridging Header】,自动创建桥接头文件。自动创建的桥接头文件默认为空。

    【Build Settings】->【Swift Compiler - General】->【Objective-C Bridging Header】内容为空,则会提示自动创建桥接头文件。

    此时桥接头文件路径自动创建:

    删除自动创建的桥接头文件【 demo-Bridging-Header.h 】,现在演示手动创建桥接头文件:

    文件夹【SupportFiles】->鼠标右键【New File...】->【Header File】->【Next】

    ->输入文件名称或选择默认名称->【Create】->手动创建的桥接头文件默认内容:

    1 #ifndef Header_h
    2 #define Header_h
    3 
    4 
    5 #endif /* Header_h */

    ->桥接头文件路径设置桥接头文件路径:(Build Settings搜索:Objective)

       【Build Settings】->【Swift Compiler - General】->【Objective-C Bridging Header】(可直接拖入文件位置): demo/SupportFiles/Header.h 

    引用OC文件:

    1 #ifndef Header_h
    2 #define Header_h
    3 #import "LFCGzipUtility.h"
    4 
    5 #endif /* Header_h */

    import<>:引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件。

    import"":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查。

    查看【LFCGzipUtility.h】

     1 #import <Foundation/Foundation.h>
     2 #import "zlib.h"
     3  
     4 @interface LFCGzipUtility : NSObject
     5 {
     6  
     7 }
     8  
     9 +(NSData*) gzipData:(NSData*)pUncompressedData;  //压缩
    10 +(NSData*) ungzipData:(NSData *)compressedData;  //解压缩
    11  
    12 @end

    具有两个类方法,调用OC示例:

    1  func unCompress(_ str:String) -> String
    2 {
    3     //字符串转Data
    4     let gData:Data = str.data(using: String.Encoding.utf8)!
    5     let unGData:Data = LFCGzipUtility.ungzipData(gData)
    6     //Data转字符串
    7     let strLogin:String = String(data: unGData, encoding: String.Encoding.utf8) ?? String()
    8     return strLogin
    9 }

    二、Objective-C文件调用Swift文件

    【Build Settings】 ->【 Packaging】中的选项:

    【Defines Module】:Yes

    【 Product Module Name】 :(记录项目名称)

    在需要引用的OC文件头部引入,引入格式:

    #import "项目名称-Swift.h"

    其中:项目名称:【 Product Module Name】的内容

    示例:

    #import "demo-Swift.h"

     如果生成失败:试一试清理项目文件重新生成:【Product】->【Clean Build Folder】

  • 相关阅读:
    20155229-付钰涵-分析自我技能延展到c语言学习状况
    预备作业①
    读《嵌入式系统项目分析入门与实践》⑤
    读《嵌入式系统项目分析入门与实践》④
    读《嵌入式系统项目分析入门与实践》③
    读《嵌入式系统项目分析入门与实践》②
    读《嵌入式系统项目分析入门与实践》①
    读《大学有感》④
    读《大学之路》有感③
    读《大学之路》有感②
  • 原文地址:https://www.cnblogs.com/strengthen/p/10681837.html
Copyright © 2011-2022 走看看