• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift:OptionalType、Swift和Objective-C混编的讲解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

❤️❤️❤️swift中的Optional Type的?和!含义:其实就是一个装包和拆包的过程

optional的含义:
Optional事实上是一个枚举类型,Optional包含None和Some两种类型,而nil就是Optional.None,非nil就是Optional.Some。如果Optional变量在声明时不初始化,swift会调用init()来初始化变量为nil,而用非nil的值来初始化变量时,会通过Some(T)把该原始值包装,所以在之后使用的时候我们需要通过解包取出原始值才能使用。   
     问号?
     a.声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil
     b.在对变量值操作前添加?,判断如果变量是nil,则不响应后面的方法。
     
     叹号!
     a.声明时添加!,告诉编译器这个是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!
     b.在对变量操作前添加!,表示默认为非nil,直接解包进行处理
 
 
使用?的场景:
可选?装包:
 
使用!的场景:
可选隐式解包:
必须使用!解包:
 
 
总结一下:
 
 
❤️❤️❤️swift和Objective-C混编使用
swift中使用OC: 
在项目工程的Build Settings中搜索并设置Bridging-Header-------- 头文件桥接,xxx(项目名)-Bridging-Header.h中导入OC中需要的类头文件,即 #import “Header.h”
 
OC中使用swift: 
在项目工程的Build Settings中搜索并设置packaging中的Product Module Name的名称—————然后在OC类中导入swift头文件,即 #import xxx(Product Module Name)-Swift.h 
 
 
混编的具体步骤演示如下:
前期工作:
第一步:创建一个swift工程文件Project,生成Project文件
 
第二步:在建好的swift项目中新建一个swift文件,设置类名为学生类Student,点击Next创建成功,生成Student.swift文件
 
第三步:再创建一个Objective-C文件,设置类名为课程类Course
第四步:点击Next,此时弹出一个弹出框,点击yes即可,生成Course.h和Course.m文件,还有xxx(工程名)-Bridging-Header.h文件,即 Project-Bridging-Header.h
 
 
 
好了,前期工作准备完毕,现在就是Objective-C和Swift的类混编使用了:
 
在Swift中使用Objective-C的类:
1.选中Project-Bridging-Header.h,进入它的文件中,然后导入Course.h头文件,即桥接双方的头文件
2.此时就可以在Student.swift中使用Course类了,如下所示
 
在Objective-C中使用Swift的类:
 
方法一:
1.进入工程的面板中找到Build Settings,搜索packaging,截图如下
 
2.可以看到Product Module Name这一项,既可以复制他后面的名字作为 $(PRODUCT_NAME:c99extidentifier)-swift.h头文件,当然也可以自己重新设置名称,不过不能以数字0开头,命名要规范。我设置一个新名字为"ProductName-swift.h",然后按Command+B快捷键编译一下,因为必须先编译生成Student.swift中的所有内容,然后才能在Course类中导入这个头文件
3.编译成功后,就可以在Course类中导入ProductName-swift.h了,即#import "ProductName-swift.h",可以看到如下我声明得到学生对象

此时,你可以按住Command键,然后点击#import “ProductName-Swift.h”可以进去看看编译的所有文件

    

 方法二:

在创建工程时,可以直接在Objective-C的文件中导入固定的文件方式并编译一下即可,也即:

import "ProjectName-Swift.h",这个ProjectName:开始创建的工程名

在此实例下,导入方式为:import "Project-Swift.h"

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
NS_BLOCK_ASSERTIONS in Objective-C发布时间:2022-07-12
下一篇:
Objective-C 对象,实例和方法发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap