swift的可选值(optional)

简介:

苹果那文档写了一大堆也没有好好的写一下可选值(optional)这个东西。就是在有一个“Optional Chaining”的章节,但是也不是很充分的说明。最后找了半天在“the basics”里墨迹了几句。如果你没找到optional这个东西的话,那你可能也错过了一个很重要的东西,非optional类型的变量,这个变量的值不能是nil。这一点和ObjC以及其他的编程语言如C#、Java什么的差别很大。

1
2
var example : String  =  "hello world"
example  =  nil  / / ERROR,  Type  'String'  does  not  conform to protocol  'NilLiteralConvertible'

Optional的值就是可以为空也可以不为空的。定义的方式是这个样子的:

1
var example : String?  =  "hello world"

对,就是在类型后面的那个问号。有了这个问号,这个变量就是optional的了。它的值就可以为nil了。但是,你是不能直接访问这个变量。

书接上文,非optional的变量不可以赋值为nil的特点。让编程变的安全。因为,如果不检查是否为空就直接使用的话是编译不过的。如:

1
2
3
var example : String?  =  "hello world"
/ / example  =  nil
var example2 : String  =  example     / / ERROR, value of optional  type  'String?'  not  unwrapped

错误的提示说的是optional类型的变量没有“拆包”。那么,如何拆包呢。很简单,只要在后面加上一个感叹号就可以了,如:

1
2
3
var example : String?  =  "hello world"
/ / example  =  nil
var example2 : String  =  example!

“!”感叹号unwrapp,拆包optional的变量。如果这个变量下有值的话就返回这个值,没有的话就会产生一个运行时的错误。

所以呢,苹果推荐了一种更安全的使用optional类型变量的方法。首先设定一个Employee类。它有一个成员属性为name。

1
2
3
4
5
6
7
class  Employee {
     var name : String
     
     init(name: String){
         self .name  =  name
     }
}

然后,初始化一个Employee实例,并设定它是optional的: var e : Employee? = Employee(name:"Tom")。这个时候如果直接访问name属性就会报错,e.name = "Tom Cat" // ERROR。如上所说需要拆包。e!.name = "Tom Cat"。那么安全的方式是什么样呢:

1
2
3
4
5
6
7
8
var e : Employee?  =  Employee( "Tom" )
 
if  let en  =  e?.name {
     println( "employee's name is \(en)" )
}
else {
     println( "unable to identify the employee" )
}

直接用感叹号的方法访问可能会运行时错误,如:let en = e!.name

延伸阅读:“?”问号和“!”感叹号。都是Optional<T>的简写。更多请了解swift的泛型和Optional<T>。

 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!













本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/4018142.html ,如需转载请自行联系原作者


相关文章
|
Swift iOS开发
9 如何在Swift中使用Optional
如何在Swift中使用Optional
67 2
|
6月前
|
安全 Swift
Swift 语言:什么是可选类型(Optional)?如何处理可选类型的安全解包?
Swift的可选类型是处理值可能缺失的类,用?表示。它们能表示有值或无值状态。安全解包用`if let`或`guard let`避免崩溃,而强制解包`!`则风险较高,若值为`nil`会触发运行时错误。
46 0
|
Swift C++
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
341 0
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
|
Swift
Swift专题讲解十七——Optional链
Swift专题讲解十七——Optional链
123 0
|
安全 Swift iOS开发
swift4.1 系统学习九 Optional
// // main.swift // swift09 // // Created by iOS on 2018/9/29. // Copyright © 2018年 weiman. All rights reserved. // import Foundation // swift学习笔记9 /* Optional:可选类型 ? 可选类型是swift特色之一,也是很多初学者不适应的原因之一。
1014 0
|
Swift
SWIFT Optional Value
SWIFT中有一个类型定义叫可选值,在变量类型后面加一个?号即可定义一个类型为Optional Value的变量,当在使用变量时要用到强制解包!.  如在页面上有一个可选输入年龄的框,在接受数据的时间就可能要定义一个可选值的变量.
829 0
|
iOS开发 Swift 编译器
Swift 可选值(Optional Values)介绍
Optional的定义 Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil。
1060 0
|
iOS开发 Swift
Swift语言指南(六)--可选值
原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是:   · 存在一个值,这个值等于 x 或   · 不存在任何值  注: 在 C 和 Objective-C 中可选值的概念并不存在。
916 0
|
iOS开发 Swift
Swift语言指南(六)--可选值
在值可能不存在的情况下使用可选值(optional), 可选值是:   · 存在一个值,这个值等于 x 或   · 不存在任何值  注: 在 C 和 Objective-C 中可选值的概念并不存在。
894 0