重新认识Swift中的可选型(Swift2.1)
//: 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)的更多相关文章
- swift中为什么要创造出可选型?
(1)因为nil这个东西,swift中没有就是没有. Int? 叫 整型可选型,如果不提前声明,直接赋值变量 nil会报错 . 可以将Int赋值给Int? ,但是不能将Int?赋值给Int . ...
- Swift中的单例的实现方式
单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ...
- swift 中Value Type VS Class Type
ios 中Value Type 和 Class Type 有哪些异同点,这个问题是在微信的公共帐号中看到的,觉得挺有意思,这里梳理一下. 1.swift 中为什么要设置值类型? 值类型在参数传递.赋值 ...
- 早期Swift中Cocos2D初始化代码的重构
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在早期的Swift中在子类里只能调用超类的design ...
- 怎样在Swift中使用NSError
步骤一:声明NSError变量. 一定要加"?",不加或者加"!"都不行.由于使用了optional,所以要用var而不用let. var error: NSE ...
- Swift 中枚举
Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [AP ...
- Swift中NSDictionaryOfVariableBindings的替代方案
有日子没写东西了,抽点时间练练笔头子,业精于勤荒于嬉~ 近期从OC转到了Swift2,因为Swift一直没有正经学正经用,所以对这门语言的理解基本算是个球...不得不感慨苹果的动作之快.Swift还没 ...
- 高阶函数---swift中的泛型介绍(一步步实现Map函数)
说明 本文内容均出自函数式 Swift一书, 此处整理仅仅是为了自己日后方便查看, 需要深入研究的话, 可以点进去购买, 支持原作者 本书由 王巍–新浪微博大神翻译 OneV's Den 喵神博客 接 ...
- swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明
关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...
随机推荐
- (转:亲测)cnblogs博文浏览[推荐、Top、评论、关注、收藏]利器代码片段
authour: Others(hoojo) updatetime: 2015-04-25 09:30:23 friendly link: http://www.cnblogs.com/hoojo/a ...
- HTML中插入视频
最常用的向HTML中插入视频的方法有两种,一种是古老的<object></object>标签,一种是html5中的<video></video>标签. ...
- python之路——爬虫实例
urlController.py import bsController from urllib import request class SpiderMain(object): def __init ...
- Scut:GameWebSocketHost 解析
想使用 Scut 做的是一个短连接项目,所以先直接看 GameWebSocketHost 了. 先来看下 GameWebSocketHost 的成员: protected bool EnableHtt ...
- Multiplication Table
CF#256D:http://codeforces.com/contest/448/problem/D 题意:给你一个n*m的表格,第i行第j列的数据是i*j,然后询问第k小的数,这里的排序是不去重的 ...
- 业内人士详述SIEM建设的演进过程
http://www.verydemo.com/demo_c289_i22006.html 4A http://www.verydemo.com/demo_c281_i40888.html 从SIEM ...
- Java中匿名类的两种实现方式(转)
使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...
- DEDECMS调用最新评论
{dede:feedback row='5' titlelen='24' infolen='80'} <div class="yhplk"><div>[fi ...
- 基于Minifilter框架的文件过滤驱动理解
概述 Minifilter即File System Minifilter Drivers,是Windows为了简化第三方开发人员开发文件过滤驱动而提供的一套框架,这个框架依赖于一个称之为Filter ...
- JVM之--Java内存结构(第一篇)
最近在和同事朋友聊天的时候,发现一个很让人思考的问题,很多人总觉得JVM将java和操作系统隔离开来,导致很多人不用熟悉操作系统,甚至不用了解JVM本身即可完全掌握Java这一门技术,其实个人的观点是 ...