❤️❤️❤️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"

swift:Optional Type 、Swift和Objective-C混编的讲解的更多相关文章

  1. Swift数独游戏优化——C++与OC混编、plist自动生成

    一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的.   但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Termin ...

  2. swift objective-及c语言 混编

    在xocde6出来我们大部分代码都是用objective-c写的(部分C/C++),现在出生来了一个新的语言叫swift,那么如何既能使用我们之前的代码,还可以使用新语言呢, 本文就此做一下说明. 关 ...

  3. iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用

    swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...

  4. 随手记Swift基础和Optional Type(问号?和感叹号!)

    距离Apple推出Swift已经有几天了,网上也时不时出现"急招Swift程序猿,要求有一天工作经验"的帖子. 看到Swift,除了苹果放的另外一门语言的链接(http://swi ...

  5. [ios][swift]swift混编

    http://blog.csdn.net/iflychenyang/article/details/8876542(如何在Objective-C的头文件引用C++的头文件) 1.将.m文件扩展名改为. ...

  6. Swift & OC 混编 浅析

    转载自:http://www.infoq.com/cn/articles/wangyi-cartoon-swift-mixed-practice?utm_campaign=rightbar_v2&am ...

  7. Swift和Objective-C混编注意事项

    前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋没来讲,的确算是福音,但对于整个iOS编程从业者来讲 ...

  8. iOS 里面 Swift与Objective-C混编,Swift与C++混编的一些比较

        即使你尽量用Swift编写iOS程序,难免会遇到部分算法是用C++语言编写的.那你只能去问问”度娘“或“狗哥”怎么用Swift调用C++算法.   一,C,C++, Objective-C,S ...

  9. Swift和Objective-C混编注意

    前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋们来讲,的确算是福音,但对于整个iOS编程从业者来讲 ...

随机推荐

  1. 四则运算2+psp0级表格

    四则运算2 一.题目和要求 题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版) 要求: 1.题目避免重复 2.可定制(数量/打印 ...

  2. Elasticsearch 权威指南 NESTAPI地址

    Elasticsearch 权威指南:http://fuxiaopang.gitbooks.io/learnelasticsearch/content/index.html NEST:http://n ...

  3. android开发,设置listview的高度无效

    一般是在item的layout中设置高度 android:layout_height="100dp" 但是发现这样后无效,因此找到解决办法,如下: android:minHeigh ...

  4. android 下载图片出现SkImageDecoder::Factory returned null,BitmapFactory.Options压缩

    网上有很多说是因为没有采用HttpClient造成的,尼玛,我改成了HttpClient 请求图片之后还是会出现SkImageDecoder::Factory returned null, 但是直接使 ...

  5. 【Anagrams】 cpp

    题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will ...

  6. asp.net 实现微信公众平台的主动推送信息

    通过学习借鉴朋友的实现方法进行整理(微信公众帐号主动发送消息给用户,asp.net版本). /// <summary> /// MD5 32位加密 /// </summary> ...

  7. MySQL基本概念

    MySQL 数据库 MySQL可分为三个层次:文件层次,服务层次,界面 常用的数据类型:int 整数float double decimal ——小数(要在十进位栏里设置小数点后最大显示位数)varc ...

  8. SASS学习笔记_02

    导入 当模块化布局的时候 导入头和尾 私有化 不生成css文件 文件名前面加下划线   结果   嵌套导入   导入css文件 不推荐   注释 和默认变量值

  9. proxy server 代理服务器

    有时候,我觉得自己需要去搞明白.搞清楚一个概念,帮我打通一下自己的知识体系,或者说,尝试联络起来. 1. 简介 突破自身IP限制,访问国外站点. 访问单位或者团体内部资源. 突破中国电信的IP封锁. ...

  10. curl Protocol 'http not supported or disabled in libcurl

    C:\Documents and Settings\ganiks.liu\Desktop\curl-7.37.0-win32\bin>curl -V curl 7.37.0 (i386-pc-w ...