可选类型的介绍

  • 注意:

    • 可选类型时swift中较理解的一个知识点
    • 暂时先了解,多利用Xcode的提示来使用
    • 随着学习的深入,慢慢理解其中的原理和好处
  • 概念:
    • 在OC开发中,如果一个变量暂停不使用,可以赋值为0(基本属性类型)或者赋值为空(对象类型)
    • 在swift开发中,nil也是一个特殊的类型.因为和真实的类型不匹配是不能赋值的(swift是强类型语言)
    • 但是开发中赋值nil,在所难免.因此推出了可选类型
  • 可选类型的取值:
    • 空值
    • 有值

定义可选类型

  • 定义一个可选类型有两种写法

    • 最基本的写法
    • 语法糖(常用)
// 错误写法
// let string : String = nil
// 正确写法:
// 注意:name的类型是一个可选类型,但是该可选类型中可以存放字符串.
// 写法一:定义可选类型
let name : Optional<String> = nil // 写法二:定义可选类型,语法糖(常用)
let name : String? = nil

可选类型的使用

// 演练一:给可选类型赋值
// 定义可选类型
var string : Optional<String> = nil // 给可选类型赋值
// 错误写法:因此该可选类型中只能存放字符串
string = 123
// 正确写法:
string = "Hello world" // 打印结果
print(string)
// 结果:Optional("Hello world")\n
// 因为打印出来的是可选类型,所有会带Optional // 演练二:取出可选类型的值
// 取出可选类型的真实值(解包)
print(string!)
// 结果:Hello world\n // 注意:如果可选类型为nil,强制取出其中的值(解包),会出错
string = nil
print(string!) // 报错 // 正确写法:
if string != nil {
print(string!)
} // 简单写法:为了让在if语句中可以方便使用string
// 可选绑定
if let str = string {
print(str)
}
import UIKit

// 类中所有的属性在对象初始化时,必须有初始化值
class Person : NSObject {
var name : String? //有值或为空值
var view : UIView?
} // 1.定义可选类型
// 1>普通定义可选类型的方式
// var name : Optional<String>
// 2>语法糖
var name : String? // 2.给可选类型赋值
name = "why" // 3.从可选类型中取值
// Optional("why")
print(name)
// 从可选类型中取值:可选类型!-->强制解包
//print(name!) // 4.注意:如果可选类型中没有值,那么强制解包程序会崩溃
// 强制解包是非常危险的操作:建议在解包前先判断可选类型中是否有值
if name != nil {
print(name!) print(name!) print(name!)
} // 5.可选绑定
// 1> 判断name是否有值,如果没有值,则不执行{}.
// 2> 如果有值,则对可选类型进行解包,并且将解包后的值赋值给前面的常量
//if let tempName = name {
// print(tempName)
//} if let name = name {
print(name)
print(name)
print(name)
print(name)
}

二:可选类型的应用场景

import UIKit
/*
1:当两个对象的类型不相同的时候,不能直接进行赋值, NSURL(string:urlStr)创建url得到的类型是NSURL?可选类型,也可以不标注NSURL?,用类型推导
2:可选类型进行解包:1:!来进行强制解包,要先判断是否为nil ,否则为nil进行强制解包的时候会出现崩溃 2:也可以用可选绑定 */
let urlStr = "www.baidu.com"
let url : NSURL? = NSURL(string:urlStr)
//if url != nil {
// let request = NSURLRequest(url: url! as URL)
//} //可选绑定
if let url = url { let request = NSURLRequest(url: url as URL)
}

swift学习第九天:可选类型以及应用场景的更多相关文章

  1. 初步swift语言学习笔记2(可选类型?和隐式可选类型!)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28904115 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...

  2. swift 2.0 语法 可选类型

    import UIKit /*: 可选类型(可以有值, 也可以没有值) * 在OC中我们可以给一个对象类型变量赋值为nil或者一个对象, 而在Swift中如果想给一个变量赋值为nil那么必须明确指定为 ...

  3. swift学习笔记之-可选链式调用

    //可选链式调用 import UIKit /*可选链式调用(Optional Chaining) 1.在可选值上请求和调用该可选值的属性.方法及下标的方法,如果可选值有值,那么调用就会成功,返回可选 ...

  4. Swift学习(三)类型推导&基本运算&分支&循环

    一.Swift中类型推导&基本运算 Swift中类型推导 如果一个标识符在定义时有直接赋值,那么可以根据后面赋值的类型,来推导出前面标识符的类型,这样前面标识符的(:类型)可以省略 查看标识符 ...

  5. Swift 学习笔记 enum 枚举类型

    异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...

  6. Swift(二,元组,可选类型,类型转化)

    一,首先,元组是Swift中特有的,OC中没有元组相关类型,具体怎么用,看下面的例子吧 //1.使用元组来定义一组数据 let infoTuple = (,1.8) let nameTuple = i ...

  7. Swift入门(四)——可选类型(Optionals)与断言(Assert)

    可选类型是什么? 首先看一个问题,Swift中String类型的变量有一个叫做toInt的方法,能够把String类型变量转换为Int类型变量. var stringValue = "5&q ...

  8. Swift学习笔记四

    前面三篇笔记通过一些示例展示了Swift的一些特性,粗略地介绍了它的语法和特色,从这一篇笔记开始,将正式系统地介绍Swift的语法和特性了. Swift是一门为iOS和OSX开发准备的全新语言,但是它 ...

  9. 《从零开始学Swift》学习笔记(Day 27)——可选类型

    原创文章,欢迎转载.转载请注明:关东升的博客 可选类型: 我们先看看如下代码: n1 = nil //编译错误 let str: String = nil //编译错误 Int和String类型不能接 ...

随机推荐

  1. 抓包神器Fiddler之Https请求随心转

    随着AppleStore对APP的审核越来越严格,客户端请求服务端API的方式大多数都变更为了https,在更安全的同时又引起了另外一个问题——本地抓包开发调试的不便. 一般来说,我们在开发API的时 ...

  2. 【MongoDB】mongodump and mongorestore of mogodb

    The another tool will be mentioned in this blog, namely mongodump and mongorestore. General speaking ...

  3. Java总结之线程

    [线程的基本概念] 线程是一个程序内部的顺序控制流. 线程和进程的差别:   每一个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销.   线程能够看成是轻量级的进程,同一类线程 ...

  4. XMPP开发之从零開始

    对于server的搭建和设置.我在这里就不再多说了.有好多前辈已经帮大家攻克了.能够參考下这篇博客 XMPPserver配置 我依照这个博客配置好了,server后,然后在网上參照代码写了一个小的de ...

  5. 28.Node.js 函数和匿名函数

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html 在JavaScript中,一个函数可以作为另一个函数的参数.我们可以先定义一个函数, ...

  6. c#的中英文混合字符串截取 public static string SubString(string inputString, int byteLength)

    /// <summary>        /// c#的中英文混合字符串截取(区分中英文)        /// </summary>        /// <param ...

  7. IIS进程回收 空闲时Net线程未运行

    最近手上的项目,用的是asp.net mvc,后台有个线程在循环接收socket数据,本身在系统运行的时候访问页面没问题,但是发现没访问时,后台没有接收数据,后来知道了是IIS把线程回收了.解决方法如 ...

  8. [NOI2008]假面舞会(DFS)

    Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...

  9. CTF加密题型解析:RSA算法的CTF解法之一

    RSA介绍 根据加密原理,可以将大部分的加密算法分为两大类:对称加密算法和非对称加密算法.对称加密算法的加密和解密采用的是同一套算法规则.而非对称加密算法加密时用的是公钥(公开给所有人),解密时用的是 ...

  10. 【Codeforces Round #455 (Div. 2) C】 Python Indentation

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一个for循环之后. 下一个写代码的地方一是从(x+1,y+1)开始的 然后如果写完了一个simple statement 下次就有 ...