//: Playground - noun: a place where people can play

import UIKit

/*
Swift中nil代表是是另外一种类型, 而不像OC那样, 任何对象都能赋值为nil,
Swift中的nil就是空, 什么都没有的意思, 当一个变量有可能存在空值的时候, 必须显式的申明为可选型,
否则不能直接赋值为nil, 因为无论是Int, String还是其他的类型, 都和nil不是同一种类型,
道理就跟将一个Int类型赋值给一个String类型的变量一样, 是行不通的!
所以, 要想一个变量可以赋值为nil, 就必须显式申明为可选型, 也就是在类型后面加上"?"
下面直接代码演示...
*/ // let errorCode = nil 这行代码会报错, 因为Swift不能自动识别这个到底是什么类型的可选型
// let errorCode: String = nil 这行代码会报错, 因为nil和errorCode不是同一种类型(String) // 这样才是正确的代码
var errorCode: String? = nil; // 一个可选型可以复制一个同类型的非可选型(或可选型)的值, 例如这里404是一个String类型, 而不是String?类型
errorCode = "404"
// 但是不能直接将一个可选值赋值给同类非可选型变量
// let errorCode2: String = errorCode // 这行代码会报错
// 要想将一个可选值赋值给非可选型变量, 就需要对可选值进行解包操作 // 1.强制解包, 存在一定的风险, 例如errorCode为nil的时候, 会出现异常, 一般只使用在确定一个可选值一定为非nil的时候使用
var errorCode2: String = errorCode!
// 2.if-let解包
if let errorCode = errorCode { // 只有errorCode非nil, 才会执行
errorCode2 = errorCode;
} else { // 否则就执行这里
print("errorCode为nil")
} // 另外还可以一次对多个可选值进行解包
let errorMessage: String? = "Not Found"
if let errorCode = errorCode, errorMessage = errorMessage {
print("Error Code is \(errorCode), Error Message is \(errorMessage).")
}

  

重新认识Swift中的可选型(Swift2.1)的更多相关文章

  1. swift中为什么要创造出可选型?

    (1)因为nil这个东西,swift中没有就是没有.  Int? 叫 整型可选型,如果不提前声明,直接赋值变量 nil会报错 . 可以将Int赋值给Int?   ,但是不能将Int?赋值给Int . ...

  2. Swift中的单例的实现方式

    单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ...

  3. swift 中Value Type VS Class Type

    ios 中Value Type 和 Class Type 有哪些异同点,这个问题是在微信的公共帐号中看到的,觉得挺有意思,这里梳理一下. 1.swift 中为什么要设置值类型? 值类型在参数传递.赋值 ...

  4. 早期Swift中Cocos2D初始化代码的重构

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在早期的Swift中在子类里只能调用超类的design ...

  5. 怎样在Swift中使用NSError

    步骤一:声明NSError变量. 一定要加"?",不加或者加"!"都不行.由于使用了optional,所以要用var而不用let. var error: NSE ...

  6. Swift 中枚举

    Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [AP ...

  7. Swift中NSDictionaryOfVariableBindings的替代方案

    有日子没写东西了,抽点时间练练笔头子,业精于勤荒于嬉~ 近期从OC转到了Swift2,因为Swift一直没有正经学正经用,所以对这门语言的理解基本算是个球...不得不感慨苹果的动作之快.Swift还没 ...

  8. 高阶函数---swift中的泛型介绍(一步步实现Map函数)

    说明 本文内容均出自函数式 Swift一书, 此处整理仅仅是为了自己日后方便查看, 需要深入研究的话, 可以点进去购买, 支持原作者 本书由 王巍–新浪微博大神翻译 OneV's Den 喵神博客 接 ...

  9. swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明

    关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...

随机推荐

  1. KeyPress事件

    在做一个小demo的时候,发现在文本框中输入一个数字,按下“+”,数字增加了,但是“+”仍旧存在的问题,解决方案:提前执行键盘press事件 private void txtNum_KeyPress( ...

  2. codevs 2188 最长上升子序列

    题目描述 Description LIS问题是最经典的动态规划基础问题之一.如果要求一个满足一定条件的最长上升子序列,你还能解决吗? 给出一个长度为N整数序列,请求出它的包含第K个元素的最长上升子序列 ...

  3. 【JavsScript】关于javascript的路线

    Client JS: Level 1 基本对象的掌握----------------------------------------->Library(兼容)/Widget(UI+功能)---- ...

  4. c/c++关于内存分配的知识(非常详细的比较,且VirtualAlloc分配内直接在进程的地址空间中保留一快内存)

    一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一 ...

  5. flex中validateall()方法, 多Item验证 ,结果统一提示

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  6. java浮点类型计算

    java浮点类型需要采用java.math.*这个工具包,这样的计算结果才是我们想要的.呵呵 import java.math.BigDecimal; import java.text.NumberF ...

  7. DateTime用法

    //今天 DateTime.Now.Date.ToShortDateString(); //昨天,也就是今天的日期减一 DateTime.Now.AddDays(-1).ToShortDateStri ...

  8. 怎么都没人提 google 加密搜索呢? google如何稳定打开

    1. 使用smarthosts提供的hosts文件 https://smarthosts.googlecode.com/svn/trunk/hosts2. 修改浏览器默认搜索引擎为 https://e ...

  9. Going Home - poj 2195(最小费用流 | 二分匹配)

    题目大意:在一个网格里面有n个小男人和n个房子,现在想让每个小男人都有一个房子住,不过每个人移动一下都需要花费¥1,现在求出来最小的总花费.ps:可以认为网格的每个点都是很大的广场并且容纳所有的人,人 ...

  10. WPS2012交叉引用技巧,word比wps这点强更新參考文献

                WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...