• 可选类型的介绍

    • 注意:

      • 可选类型时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. 第11章 .NET Remoting

    11.1理解remoting 11.1.1应用程序域基本概念 .NET提供了一项技术,使得跨应用程序域中的对象也可以相互访问,该技术就是.NET remoting.(185) 11.1.2应用程序域的 ...

  2. iOS中线程同步基本详解

    为什么使用线程同步技术:多个线程是同时执行的 如果多个线程同时操作一个资源 会造成此资源的数据错乱 线程同步简介 线程同步,多条线程按顺序地访问某个资源 注意:此处的同步不是一起执行的意思 是一个一个 ...

  3. python 协程

    协程 协程就是一种用户态内的上下文切换技术. 1.使用gevent实现协程, gevent.spawn()调用函数,  gevent.sleep(1) 模拟阻塞,实现切换. import gevent ...

  4. (转载)python2+selenium自动化测试系列(二)

    16.Selenium2+python自动化16-alert\confirm\prompt 17.Selenium2+python自动化17-JS处理滚动条 18.Selenium2+python自动 ...

  5. Linux入门学习,开启端口号

    之前买了一个阿里云Centos 7服务器,默认开启22端口和80端口,想开启其他端口号如何做 1.开启端口号 [root@localhost ~]# /sbin/iptables -I INPUT - ...

  6. js替换选中的文字

    替换html中选中的文字 function replaceSelection() { if (window.getSelection) { var selecter = window.getSelec ...

  7. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...

  8. XAF学习笔记2,关于XAF

    简单的说下XAF,王北的博客写得非常好了.我就不在啰嗦, XAF能解决几个问题 1,不用自己创建数据库(设定好Model自动创建数据库,我们只要配置好app.config文件的数据库路径就行.) 2, ...

  9. WebView网页中使用到支付宝调不起来,提示ERR_UNKNOWN_URL_SCHEME

    转载自:http://blog.csdn.net/u014369799/article/details/51305788 在WebView中如果使用到支付宝,需要添加以下代码,否则操作系统会将支付宝的 ...

  10. 一起买beta版PHP单元测试

    一起买beta版PHP单元测试 测试目的 保证代码质量,对各个单元进行测试,可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误. 单元描述 完成帖子接口 ​ 将"正在进行&q ...