码迷,mamicode.com
首页 > 编程语言 > 详细

重新认识Swift中的可选型(Swift2.1)

时间:2016-05-06 10:48:57      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

//: 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)

标签:

原文地址:http://www.cnblogs.com/Rinpe/p/5464680.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!