swift 可选型的使用详解

 一、基本用法

可选性是Swift提供的一个特殊类型,它为我们编写程序提供便利的条件

swift是强类型语言,当我们需要使用一个变量,既可以为String,也可以为nil时,这时候就需要我们使用可选型。

// 使用特殊值作为“无”可能产生歧义
//var errorCode = 404
//errorCode = 0
// 使用可选型
var errorCode:Int? = 404
print( errorCode )
errorCode = nil
print( errorCode )
var color: UIColor? = nil
// Int? 和 Int 不是一种类型
let imInt = 405
errorCode = imInt
//imInt = errorCode
// 必须显示地声明可选型的类型
//var imOptional = nil
var imOptional: String? = nil

二、可选型解包使用

var errorCode:String? = "404"
print( errorCode )
// 可选型不可以直接使用
//"The errorCode is" + errorCode
// 强制解包
"The errorCode is " + errorCode!
// 强制解包是危险的
errorCode = nil
//"The errorCode is" + errorCode!
// 判断不是nil
if errorCode != nil{
"The errorCode is " + errorCode!
}
else{
"No error"
}
// if let 解包
if let unwrappedErrorCode = errorCode{
"The errorCode is " + unwrappedErrorCode
}
else{
"No error"
}
// 可以使用相同的变量名
if let errorCode = errorCode{
"The errorCode is " + errorCode
}
else{
"No error"
}
// 使用if-let同时解包多个变量
var errorMessage:String? = "Not found"
if let errorCode = errorCode{
if let errorMessage = errorMessage{
"The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage
}
}

三、多层解包(**swift3.0有变化)

//多层解包(swift 2.0使用)
if let errorCode = errorCode , errorMessage = errorMessage{
"The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage
}
//以上多层解包方法在swift3.0中应写为
if let errorCode = errorCode , let errorMessage = errorMessage{
"The errorCode is " + errorCode + "\nThe errorMessage is " + errorMessage
}
// where(swift 2.0使用)
if let errorCode = errorCode , errorMessage = errorMessage where errorCode == "404"{
print("Page not found")
}
//在swift3.0中应写为
// where
if let errorCode = errorCode , let errorMessage = errorMessage , errorCode == "404"{
print("Page not found")
}

四、Optional chaining的使用

可选型?这种写法叫做Optional chaining

这种方法可以进行尝试解包,使代码简洁

var errorMessage: String? = "Not Found"
if let errorMessage = errorMessage{
errorMessage.uppercased()
}
//使用 Optional chaining
errorMessage?.uppercased()
var uppercaseErrorMessage = errorMessage?.uppercased()
//uppercaseErrorMessage为可选型
if let errorMessage = errorMessage?.uppercased(){
errorMessage
}
// Optional chaining 也可以使用!
let uppercaseErrorMessage2 = errorMessage!.uppercased()
//此时 uppercaseErrorMessage2 为String类型。此时为强制解包,容易出现错误

五、Nil-Coalescing 的使用

// Nil-Coalescing
var errorMessage: String? = nil
let message: String
if let errorMessage = errorMessage{
message = errorMessage
}
else{
message = "No error"
}
// 使用三目运算符
let message2 = errorMessage == nil ? "No error" : errorMessage!
// 注意: 此时使用errorMessage需要强制解包.以保证message2是一个String,而非String?
// 三目运算符?:的实质就是一个if else
// 使用 ??
let message3 = errorMessage ?? "No error"
// 注意: 此时使用errorMessage不需要强制解包.
// ??符号已经保证了访问到errorMessage时, errorMessage不是nil
// Swift将为我们自动解包, 保证message2永远是一个String, 而不是String?
//这种用法叫做 Nil-Coalescing

以上所述是小编给大家介绍的swift 可选型的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Swift内置的数字类型及基本的转换方法

    虽然编写任何编程语言,需要使用不同的变量来存储各种信息.变量不过是保留的内存位置来存储值.这意味着,当创建一个变量,在内存中会保留一些空间. 可能喜欢像存储字符串,字符,宽字符,整数,浮点数,布尔等各种数据类型的信息.根据一个变量的数据类型,操作系统分配内存,并决定什么可以存储保留在存储器. 内置数据类型 Swift 为程序员提供内置以及用户定义的种类数据类型. 以下是声明变量使用最频繁的基本数据类型的列表: Int 或 UInt - 这是用于整数.更具体地可以使用Int32,Int64来定义3

  • Swift中使用可选类型完美解决占位问题

    可选类型是Swift中新引入的,功能很强大.在这篇博文里讨论的,是在Swift里,如何通过可选类型来保证强类型的安全性.作为例子,我们来创建一个Objective-C API的Swift版本,但实际上Swift本身并不需要这样的API. 为Dictionary增加objectsForKeys函数 在Objective-C中,NSDictionary有一个方法-objectsForKeys:NoFoundMarker:, 这个方法需要一个NSArray数组作为键值参数,然后返回一个包含相关值的数组

  • Swift类型创建之自定义一个类型详解

    小伙伴们,Swift中的Bool类型有着非常重要的语法功能,并支撑起了整个Swift体系中的逻辑判断体系,经过老码的研究和学习, Bool类型本身其实是对基础Boolean类型封装,小伙伴们可能咬着手指头问老码,怎么一会Bool类型,一会Boolean类型,其区别在于,前者是基于枚举的组合类型,而后者则是基本类型,只有两种true和false. ####自定义原型 接下老码根据Bool的思想来创建一个OCBool类型,来让小伙伴们了解一下Swift中到底是怎么玩儿的. 来我们先看一下OCBool

  • Swift编程中的一些类型转换方法详解

    验证一个实例的类型'类型转换'在 Swift 语言编程中.它是用来检查实例类型是否属于特定超类或子类或其自己的层次结构定义. Swift 类型转换提供两个操作符:"is" 检查值的类型和 'as' 将类型值转换为不同的类型值. 类型转换还检查实例类型是否符合特定的协议一致性标准. 定义一个类层次结构 类型转换用于检查实例的类型或者它属于特定类型.此外,检查类和它的子类层次结构来检查并转换这些实例,使之作为一个相同的层次结构. 复制代码 代码如下: class Subjects {   

  • Swift里的值类型与引用类型区别和使用

    Swift里面的类型分为两种: ●值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结构体 (struct).枚举(enum) 或者元组(tuple)的形式出现. ●引用类型(Reference Type):每个实例共享同一份数据来源,一般以类(class)的形式出现. 在这篇博文里面,我们会介绍两种类型各自的优点,以及应该怎么选择使用. 值类型与引用类型的区别 值类型和引用类型最基本的分别在复制之后的结果.当一个值类型被复制的时候,相当于创造了一个完全独立的实例,这个

  • swift 可选型的使用详解

     一.基本用法 可选性是Swift提供的一个特殊类型,它为我们编写程序提供便利的条件 swift是强类型语言,当我们需要使用一个变量,既可以为String,也可以为nil时,这时候就需要我们使用可选型. // 使用特殊值作为"无"可能产生歧义 //var errorCode = 404 //errorCode = 0 // 使用可选型 var errorCode:Int? = 404 print( errorCode ) errorCode = nil print( errorCode

  • IOS 开发之swift中手势的实例详解

    IOS 开发之swift中手势的实例详解 手势操作主要包括如下几类 手势 属性 说明 点击 UITapGestureRecognizer numberOfTapsRequired:点击的次数:numberOfTouchesRequired:点击时有手指数量 设置属性 numberOfTapsRequired 可以实现单击,或双击的效果 滑动 UISwipeGestureRecognizer direction:滑动方向 direction 滑动方向分为上Up.下Down.左Left.右Right

  • IOS Swift基础之switch用法详解

    IOS  Swift基础之switch用法详解 概述 Swift中的switch语句与Java等语言中的switch有很大的相似点,但是也有不同的地方,并且更加灵活. Swift中switch的case语句中不需要添加break Swift中需要考虑所有情况,default是必要的. case分支可以添加多个条件,用,分割 case不局限与常量,可以使使用范围 switch里可以使用元组 switch默认不需要添加break,执行一个case之后就跳出语句,如果想要继续下面的语句可以使用fall

  • Swift Set集合及常用方法详解总结

    Swift 集合 Set 及常用方法 1. 创建Set集合 // 创建Set var set: Set<Int> = [1, 2, 3] var set2 = Set(arrayLiteral: 1, 2, 3) 2. 获取元素 // set 获取最小值 set.min() // 获取第一个元素,顺序不定 set[set.startIndex] set.first // 通过下标获取元素,只能向后移动,不能向前 // 获取第二个元素 set[set.index(after: set.start

  • Swift 字符串类型及常用方法详解总结

    目录 1. 构造 2. 拼接 3. 字符 4. 转义符 5. 常用方法 Swift 字符串类型及常用方法 1. 构造 // 直接赋值 text = "" // 1. 构造方法 text = String() // "" // 字符串构造 text = String("William") // "William" // 整型构造 text = String(888) // "888" // 浮点型构造 tex

  • IOS  Swift基础之switch用法详解

    IOS  Swift基础之switch用法详解 概述 Swift中的switch语句与Java等语言中的switch有很大的相似点,但是也有不同的地方,并且更加灵活. Swift中switch的case语句中不需要添加break Swift中需要考虑所有情况,default是必要的. case分支可以添加多个条件,用,分割 case不局限与常量,可以使使用范围 switch里可以使用元组 switch默认不需要添加break,执行一个case之后就跳出语句,如果想要继续下面的语句可以使用fall

  • IOS开发Swift 与 OC相互调用详解

    目录 1.创建桥接文件 2.Swift调用OC NS_SWIFT_NAME.NS_SWIFT_UNAVAILABLE NS_REFINED_FOR_SWIFT 规则 3.OC调用Swift 4.坑点 1.创建桥接文件 在创建另一种语言的文件时XCode会提示创建项目名-Bridging-Header.h的桥接文件 2.Swift调用OC 1.创建OC文件 #import "MyViewController.h" @interface MyViewController () @end @

  • Swift教程之基础数据类型详解

    基础类型 虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟C和Objective-C相似. Swift也提供了与C和Objective-C类似的基础数据类型,包括整形Int.浮点数Double和Float.布尔类型Bool以及字符串类型String.Swift还提供了两种更强大的基本集合数据类型,Array和Dictionary,更详细的内容可以参考:Collection Types. 跟C语言一样,Swift使用特定的名称来定义和使用变量.同

  • Swift学习教程之访问控制详解

    前言 本文主要给大家介绍了关于Swift访问控制的相关内容,访问控制对访问你的其他代码源文件和模块部分进行了约束.这个特性允许你隐藏你的代码实现,并且指定通过其可以访问和使用该代码的优选接口. class,structure 和 enumeration 都可以指定访问级别,当然,property,method,initializer 和 属于这里类型的 subscript.protocol 可以限制到某个上下文,全局变量,变量和函数也可以. 另外,Swift 也提供默认的使用级别给典型的使用场景

  • Swift 常量与变量实例详解

    1.声明 swift用let对常量的声明,用var对变量进行声明 常量声明之后不可更改,变量声明之后可以对值进行更改 对常量变量的声明代码如下: let maxNum = 1000 var index = 2 注意:常量不能更改 注意:声明的时候关键字与变量名之间要空一个空格 2.连续声明 连续声明每个变量之间用","隔开 var x = 1, y = 2, z = 3 3.变量类型 当变量赋值时,swift自动识别变量类型,种几种机制叫做"type inference&qu

随机推荐