• 可选类型的介绍

    • 注意:

      • 可选类型时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)
    }

    真实应用场景

    • 目的:让代码更加严谨
    // 通过该方法创建的URL,可能有值,也可能没有值.
    // 错误写法:如果返回值是nil时,就不能接收了
    // 如果字符串中有中文,则返回值为nil,因此该方法的返回值就是一个可选类型,而使用一个NSURL类型接收是错误的
    let url : NSURL = NSURL(string: "www.520it.com") // 正确写法:使用可选类型来接收
    let url : NSURL? = NSURL(string: "www.520it.com")
    // 该方式利用类型推导
    let url = NSURL(string: "www.520it.com") // 通过url来创建request对象:在使用可选类型前要先进行判断是否有值
    // 该语法成为可选绑定(如果url有值就解包赋值给tempURL,并且执行{})
    if let tempUrl = url {
    let request = NSURLRequest(URL: tempUrl)
    }

iOS开发零基础--Swift教程 可选类型的更多相关文章

  1. iOS开发零基础--Swift教程 字符串的利用

    字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...

  2. iOS开发零基础--Swift教程 类型转换

    常见的类型转化符号 is : 用于判断一个实例是否是某一种类型 as : 将实例转成某一种类型 例子 // 1.定义数组 let array : [AnyObject] = [12, "wh ...

  3. iOS开发零基础--Swift教程 字典

    字典的介绍 字典允许按照某个键来访问元素 字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的 Swift中 ...

  4. iOS开发零基础--Swift教程 数组

    数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组分成: ...

  5. iOS开发零基础--Swift篇:逻辑分支

    一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有 ...

  6. iOS开发零基础--Swift篇:Swift中数据类型

    Swift类型的介绍 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int32 ...

  7. iOS开发零基础--Swift篇 元组

    元组的介绍 元组是Swift中特有的,OC中并没有相关类型 它是什么呢? 它是一种数据结构,在数学中应用广泛 类似于数组或者字典 可以用于定义一组数据 组成元组类型的数据可以称为“元素” 元组的定义 ...

  8. iOS开发零基础--Swift基础篇--常量&变量的定义

    什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用let来定义常量,定义之后不可以修改 使用var来定义变量,定义之后可以修改 常量和变量的使用注意: ...

  9. iOS开发零基础--Swift篇 循环

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...

随机推荐

  1. 【POJ3691】DNA repair(AC自动机,DP)

    题意: 生物课上我们学到,DNA序列中只有A, C, T和G四种片段. 经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段"ATC"是不好片段,则"AGATC ...

  2. 解决 VMWARE MAC 10.12无法全屏的问题

    昨天我在VMware上装了10.10,然后通过APP store 升级了系统到 10.12,升级前安装VMware tools 能自动全屏,可是升级后不行. 然后在网上查了很多资料,发现并没有这方面的 ...

  3. java_method_下载导入模版

    //调用方法 upDown.download(request, response, request.getRealPath("")+"/output/BlackNumbe ...

  4. Android下载图片/调用系统相机拍照、显示并保存到本地

    package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException ...

  5. 什么是IO流 \ 以及文件输入输出

    一.IO流的分类: 流按照操作数据的类型分为两种:字节流:字符流. 1.什么是字节流:读取的是文件的二进制数据,不会对二进制做处理,不会解析成看得懂的数据. 2.什么是字符流:读取的是文件的二进制数据 ...

  6. jQuery的开始

    一.下载 jQuery http://jquery.com/download/ 二.什么是jQuery: 1.jQuery 是一个 JavaScript 库. 2.jQuery 极大地简化了 Java ...

  7. 初涉定制linux系统之——自动化安装Centos系统镜像制作

    最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建O__O "….. 本 ...

  8. Oracle 左连接、右连接、全外连接、(+)号作用

    分类: Oracle Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer ...

  9. Redis GetTypedClient

    C#操作Redis   未包含GetTypedClient定义 原创,转载请注明出处. VS版本:2015 用NuGet安装了Redis的包 按照百度的各种教程来操作,但是发现网上下载的DEMO可以正 ...

  10. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier

    本人是本文的作者,首发于ifeve(非阻塞同步算法实战(二)-BoundlessCyclicBarrier) 前言 相比上一 篇而言,本文不需要太多的准备知识,但技巧性更强一些.因为分析.设计的过程比 ...