import UIKit

/*:
可选类型
* 可选类型表示变量可以有值, 也可以没有值
* C 和 Objective-C 中并没有可选类型这个概念
* Swift中只有可选类型才可以赋值为nil
* 如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为nil * 格式: Optional<类型> 或 在类型后面加上?号 可选类型的取值是一个枚举
* None 没有值
* Some 有值 * 由于可选类型在Swift中随处可见, 所以系统做了一个语法糖, 在类型后面加上?
注意:
* nil不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。
* Swift 的nil和 Objective-C 中的nil并不一样。在 Objective-C 中,nil是一个指向不存在对象的指针, 所以Objective-C只有对象类型才能被设置为nil(基本类型不行)。在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil,不只是对象类型。
*/ var number: Optional<Int>
number = 10
number = nil var number1: Int
number1 = 10
//number1 = nil // 推荐
var number2: Double?
number2 = 20.1
//number2 = nil // Swift中可选类型的值不能当做普通类型的值来使用
// 如果想使用可选类型的值必须进行解包操作
// 只需要在变量/常量后面加上! 就可以解包
// 解包代表着告诉系统, 该变量/常量中一定有值
var number3: Double
number3 = 3.14 print(number2)
print(number2!)
print(number3)
let sum = number2! + number3 /*
强制解析(forced unwrapping)
* init? 构造函数, ?表示不一定能够实例化出对象
* !表示告诉编译器一定有值, 编译能够通过, 如果运行时没有值就会直接崩溃
* 提示: ? 和 ! 是所有刚刚接触Swift的OC程序员最最蛋疼的问题, 前期开发要注意多看文档和利用编译器提示解决(option + click)
注意
* 在Swift开发中, 尽量不要使用强制解包, 不安全
*/ let url = NSURL(string: "http://www.520it.com")
print(url)
//print(url!) let url1 = NSURL(string: "http://www.520it.com/图片/abc.png")
print(url1) /*:
可选绑定(optional binding)
* 不需要考虑url是否有值, 能进入{}一定有值
* 不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量
* 可选绑定可以用在if和while语句中 提示:
* 在实际开发中,使用频率很高 注意:
* 可选绑定中的变量/常量只能在if后面的{}中使用
*/ if let temp = url {
print(temp)
} let value1: Int? = 10
let value2: Int? = 20
let value3: Int? = 30
let value4: Int? = 40 if let temp1 = value1 {
if let temp2 = value2 {
if let temp3 = value3 {
if let temp4 = value4 {
let sum = temp1 + temp2 + temp3 + temp4
}
}
}
} /*:
guard
* guard语句是在Swift 2.0中引进的,它是用途是在未满足某个条件时,提供一个退出的路径
* 格式: guard 表达式 else{}
注意:
* guard中的变量/常量 可以在guard后面使用
* guard一般用于避免使用强制拆包, 优化代码结构
*/
func test(){
let value1: Int? = 10
let value2: Int? = 20
let value3: Int? = 30
let value4: Int? = 40 guard let temp1 = value1 else{
return
}
guard let temp2 = value2 else{
return
}
guard let temp3 = value3 else{
return
}
guard let temp4 = value4 else{
return
}
let sum = temp1 + temp2 + temp3 + temp4
print(sum)
}
test() /*
隐式解析可选类型(implicitly unwrapped optionals)
* 有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型_总会_有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值
* 隐式解析可选类型, 并不需要每次都使用解析来获取可选值, 一个隐式解析可选类型其实就是一个普通类型,但是可以被当做非可选类型来使用
* 格式: 将可选类型后面的?改为!
* let xmgButton: UIButton! 注意:
* 如果一个变量之后可能变成nil的话请不要使用隐式解析可选类型。如果你需要在变量的生命周期中判断是否是nil的话,请使用普通可选类型
*/ let intValue: Int?
intValue = 10
print(intValue)
print(intValue!) if intValue != nil {
print(intValue!)
} if let temp = intValue {
print(temp)
} var doubleValue: Double!
doubleValue = nil
doubleValue = 3.14
print(doubleValue)

iOS:swift :可选类型的更多相关文章

  1. swift 可选类型笔记

    晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧.广州下雨,真特么的冷..好了,废话不说了,说正题说说Swift可选类型. 先定义一个变量: var string ...

  2. [swift]可选类型

    可选类型 <Swift权威指南>第2章千里之行始于足下——Swift语言基础,本章挑选了Swift语言的最基本特性加以介绍.尽管这些特性只占Swift全部特性的很少一部分,但却是所有的Sw ...

  3. Swift 可选类型-备

    我们先看看如下代码: var n1: Int = 10 n1 = nil         //编译错误 let str: String = nil    //编译错误 Int和String类型不能接受 ...

  4. Swift - 可选类型说明

    可选类型是Swift的一个特色.它表示一个变量有可能有值,也可能没有值(nil). 声明的方式是“数据类型+问号”. 而当要使用一个可选类型的变量是,要在后面加感叹号“!”. 1 2 3 4 5 6 ...

  5. swift 可选类型(optional)

    可选类型定义 Swift 标准库中定义后缀  ?为可选类型 Optional<Wrapped> 的语法糖,这里语法糖可以简单理解为一种便捷的书写语法.也就是说,下面两个声明是等价的: va ...

  6. Swift - 可选类型详解

    可选类型详解 直接上代码解释 // 类中所有的属性在对象初始化时,必须有初始化值 class Person : NSObject { var name : String? var view : UIV ...

  7. Swift可选类型(Optional)之星耀

    首先我们先看下Objective-C与Swift语言对于可选nil的不同理解: Objective-C中的nil:表示缺少一个合法的对象,是指向不存在对象的指针,对结构体.枚举等类型不起作用(会返回N ...

  8. Swift可选类型

    可选类型 可选类型的介绍 注意: 可选类型时swift中较理解的一个知识点 暂时先了解,多利用Xcode的提示来使用 随着学习的深入,慢慢理解其中的原理和好处 概念: 在OC开发中,如果一个变量暂停不 ...

  9. swift 可选类型(optional)--- swift 入门

    一.思维导图 二.代码 //这样无形中就会让代码很丑陋 if x != nil && y != nil { print("x或y都不等于空") } print(&q ...

随机推荐

  1. npm, webpack, vue-cli, vue-x, axios

    1,什么是node.js,以及npm 简单的来说Node.js就是运行在服务端的JavaScript,是基于Chrome V8引擎的.npm是Node.js包的管理工具. 2,npm的安装和更新 No ...

  2. jsp useBean

    <jsp:uesBean id="test" scope="page" class="test.useBeanTest"> 用于 ...

  3. mongo11---Access control is not enabled for the database

    今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warnings 出现这个警告的原因是新版本的MongDB为了让我们创建一个安全的数据库 必须要进行验证 后来在外网找到了答案 解决方案如 ...

  4. YTU 2894: G--我要去内蒙古大草原

    2894: G--我要去内蒙古大草原 时间限制: 1 Sec  内存限制: 128 MB 提交: 162  解决: 8 题目描述 春天到了,小明想要从烟台开车去内蒙古大草原放松一下,这两地的距离是14 ...

  5. POJ - 2516 Minimum Cost(最小费用最大流)

    1.K种物品,M个供应商,N个收购商.每种物品从一个供应商运送到一个收购商有一个单位运费.每个收购商都需要K种物品中的若干.求满足所有收购商需求的前提下的最小运费. 2.K种物品拆开来,分别对每种物品 ...

  6. 小程序-demo:小程序示例-page/api

    ylbtech-小程序-demo:小程序示例-page/api 以下将演示小程序接口能力,具体属性参数详见小程序开发文档. 1. page/component返回顶部 1. a) .js Page({ ...

  7. 《Image-to-Image Translation with Conditional Adversarial Networks》论文笔记

    出处 CVPR2017 Motivation 尝试用条件GAN网络来做image translation,让网络自己学习图片到图片的映射函数,而不需要人工定制特征. Introduction 作者从不 ...

  8. Nvidia GPU 算力查询

    GPU Compute Capability Tesla K80 3.7 Tesla K40 3.5 Tesla K20 3.5 Tesla C2075 2.0 Tesla C2050/C2070 2 ...

  9. 关于centOS7的一些笔记

    使用systemctl查看 开启 关闭服务: 查看: systemctl status arcgis.server 开启: systemctl start arcgis.server 关闭: syst ...

  10. U3D中碰撞体和刚体的关系

    1.刚体是用来接受力作用的组件: 2.碰撞体是碰撞系统用来检测碰撞的组件: 碰撞产生碰撞信息,游戏物体根据碰撞信息生成一个力作用在刚体上,刚体受力后就会产生一个速率,最终在游戏物体的运动体现出来. 也 ...