❤️❤️❤️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. c/c++中主线程退出,子线程也会退出

    #include <windows.h> #include <process.h> /* _beginthread, _endthread */ #include <io ...

  2. 使用高德地图SDK获取定位信息

    使用高德地图SDK获取定位信息 第一步: 在高德官网下载SDK,如我这里需要获取定位信息,故仅下载"定位功能" 第二步: 注册成为开发者,并创建应用获取相应的key.其中,在使用A ...

  3. Careercup - Google面试题 - 4877486110277632

    2014-05-08 05:16 题目链接 原题: Given a circle with N defined points and a point M outside the circle, fin ...

  4. source insight 完全卸载和重装

    Source insight的卸载不干净,会影响之后的安装 切入正题,完美卸载source insight的方法: 一.在pc的控制面板—>程序—>卸载程序 找到source insigh ...

  5. sqlserver2008r2 127.0.0.1 用户sa登录失败 错误18456

    按照网上的所有方法都试过了,还是不行. 最后,将sa密码重新设置一下,解决问题.

  6. POSIX 线程详解 一种支持内存共享的简捷工具

    线程是有趣的 了解如何正确运用线程是每一个优秀程序员必备的素质.线程类似于进程.如同进程,线程由内核按时间分片进行管理.在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同.而 ...

  7. 02.Redis主从集群的Sentinel配置

    1.集群环境 1.Linux服务器列表 使用4台CentOS Linux服务器搭建环境,其IP地址如下: 192.168.110.100 192.168.110.101 192.168.110.102 ...

  8. Vim配置文件(Vimrc)

    嘛……后面的比赛基本都是在NOI Linux下进行了,windows下的开发环境基本都不能用了>_>果断转了vim,记录一下vim的配置文件- set nu syntax on filet ...

  9. 了解javascript中的事件(一)

    本人目录如下: 零.寒暄 一.事件概念 二.事件流 三.事件处理程序 四.总结 零.寒暄 由于刚入职,近期事情繁多,今天好不容易中期答辩完事,晚上有一些时间,来给大家分享一篇博文. 这段时间每天写js ...

  10. Codeforces Round #283 (Div. 2)

    A:暴力弄就好,怎么方便怎么来. B:我们知道最多加10次, 然后每次加1后我们求能移动的最小值,大概O(N)的效率. #include<bits/stdc++.h> using name ...