1. import UIKit
  2. /*:
  3. 可选类型
  4. * 可选类型表示变量可以有值, 也可以没有值
  5. * C 和 Objective-C 中并没有可选类型这个概念
  6. * Swift中只有可选类型才可以赋值为nil
  7. * 如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为nil
  8. * 格式: Optional<类型> 或 在类型后面加上?号
  9. 可选类型的取值是一个枚举
  10. * None 没有值
  11. * Some 有值
  12. * 由于可选类型在Swift中随处可见, 所以系统做了一个语法糖, 在类型后面加上?
  13. 注意:
  14. * nil不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。
  15. * Swift 的nil和 Objective-C 中的nil并不一样。在 Objective-C 中,nil是一个指向不存在对象的指针, 所以Objective-C只有对象类型才能被设置为nil(基本类型不行)。在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil,不只是对象类型。
  16. */
  17. var number: Optional<Int>
  18. number = 10
  19. number = nil
  20. var number1: Int
  21. number1 = 10
  22. //number1 = nil
  23. // 推荐
  24. var number2: Double?
  25. number2 = 20.1
  26. //number2 = nil
  27. // Swift中可选类型的值不能当做普通类型的值来使用
  28. // 如果想使用可选类型的值必须进行解包操作
  29. // 只需要在变量/常量后面加上! 就可以解包
  30. // 解包代表着告诉系统, 该变量/常量中一定有值
  31. var number3: Double
  32. number3 = 3.14
  33. print(number2)
  34. print(number2!)
  35. print(number3)
  36. let sum = number2! + number3
  37. /*
  38. 强制解析(forced unwrapping)
  39. * init? 构造函数, ?表示不一定能够实例化出对象
  40. * !表示告诉编译器一定有值, 编译能够通过, 如果运行时没有值就会直接崩溃
  41. * 提示: ? 和 ! 是所有刚刚接触Swift的OC程序员最最蛋疼的问题, 前期开发要注意多看文档和利用编译器提示解决(option + click)
  42. 注意
  43. * 在Swift开发中, 尽量不要使用强制解包, 不安全
  44. */
  45. let url = NSURL(string: "http://www.520it.com")
  46. print(url)
  47. //print(url!)
  48. let url1 = NSURL(string: "http://www.520it.com/图片/abc.png")
  49. print(url1)
  50. /*:
  51. 可选绑定(optional binding)
  52. * 不需要考虑url是否有值, 能进入{}一定有值
  53. * 不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量
  54. * 可选绑定可以用在if和while语句中
  55. 提示:
  56. * 在实际开发中,使用频率很高
  57. 注意:
  58. * 可选绑定中的变量/常量只能在if后面的{}中使用
  59. */
  60. if let temp = url {
  61. print(temp)
  62. }
  63. let value1: Int? = 10
  64. let value2: Int? = 20
  65. let value3: Int? = 30
  66. let value4: Int? = 40
  67. if let temp1 = value1 {
  68. if let temp2 = value2 {
  69. if let temp3 = value3 {
  70. if let temp4 = value4 {
  71. let sum = temp1 + temp2 + temp3 + temp4
  72. }
  73. }
  74. }
  75. }
  76. /*:
  77. guard
  78. * guard语句是在Swift 2.0中引进的,它是用途是在未满足某个条件时,提供一个退出的路径
  79. * 格式: guard 表达式 else{}
  80. 注意:
  81. * guard中的变量/常量 可以在guard后面使用
  82. * guard一般用于避免使用强制拆包, 优化代码结构
  83. */
  84. func test(){
  85. let value1: Int? = 10
  86. let value2: Int? = 20
  87. let value3: Int? = 30
  88. let value4: Int? = 40
  89. guard let temp1 = value1 else{
  90. return
  91. }
  92. guard let temp2 = value2 else{
  93. return
  94. }
  95. guard let temp3 = value3 else{
  96. return
  97. }
  98. guard let temp4 = value4 else{
  99. return
  100. }
  101. let sum = temp1 + temp2 + temp3 + temp4
  102. print(sum)
  103. }
  104. test()
  105. /*
  106. 隐式解析可选类型(implicitly unwrapped optionals)
  107. * 有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型_总会_有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值
  108. * 隐式解析可选类型, 并不需要每次都使用解析来获取可选值, 一个隐式解析可选类型其实就是一个普通类型,但是可以被当做非可选类型来使用
  109. * 格式: 将可选类型后面的?改为!
  110. * let xmgButton: UIButton!
  111. 注意:
  112. * 如果一个变量之后可能变成nil的话请不要使用隐式解析可选类型。如果你需要在变量的生命周期中判断是否是nil的话,请使用普通可选类型
  113. */
  114. let intValue: Int?
  115. intValue = 10
  116. print(intValue)
  117. print(intValue!)
  118. if intValue != nil {
  119. print(intValue!)
  120. }
  121. if let temp = intValue {
  122. print(temp)
  123. }
  124. var doubleValue: Double!
  125. doubleValue = nil
  126. doubleValue = 3.14
  127. 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. IIS老革命遇到的一些问题

    今天部署一个网站到IIS,遇到了一些问题.老革命遇上新问题.前不久搞java,接触了一下tomcat,觉得真麻烦.而tomcat大概是java阵营中最简单的了吧.想不到,IIS7,友好的图形界面下,也 ...

  2. Android调用本地WebService

    package com.example.testinvokewebservice; import org.ksoap2.SoapEnvelope; import org.ksoap2.serializ ...

  3. jupyter环境的安装

    1,什么是jupyter notebook? 简介:jupyter notebook是基于网页的用户交互计算机的应用程序,其可被用于全过程计算:开发,文档编写,运行代码,和展示结果 简而言之,Jupy ...

  4. 什么是cookie?session和cookie的区别?

    1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗   考虑到安全应当使用session ...

  5. cocos2dx笔记1:概述

    1.核心的类和功能 CCDirector gameLoop,实现场景绘制.多个场景之间切换控制.控制游戏的停止,暂停,等生命周期. CCScene 场景类,每一个场景能够理解为一个游戏镜头.状态 CC ...

  6. (16)ServletContext详解

    1,作用: ServletContext对象 ,叫做Servlet的上下文对象.表示一个当前的web应用环境.一个web应用中只有一                                   ...

  7. 什么是以太坊私钥储存(Keystore)文件

    进入keystore管理以太坊私钥的障碍很大,主要是因为以太坊客户端在直接的命令行或图形界面下隐藏了大部分的密码复杂性. 例如,用geth: $ geth account new Your new a ...

  8. C# SQLite

    /***************************************************************** * C# SQLite * 说明: * 本文记录一下C#中使用SQ ...

  9. appium封装显示等待Wait类和ExpectedCondition接口

    此文已由作者夏鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 使用WebDriver做Web自动化的时候,org.openqa.selenium.support.ui中提供 ...

  10. Elementui实战知识点随记

    1. Elementui实战知识点随记 1.1. 表单验证 对于复杂数据,类似于对象里面包含数组,每个数组又包含多个对象,表单验证我查看了网上很多资料都说Elementui不支持,实际上,经过我官网的 ...