[swift]可选类型

可选类型

《Swift权威指南》第2章千里之行始于足下——Swift语言基础,本章挑选了Swift语言的最基本特性加以介绍。尽管这些特性只占Swift全部特性的很少一部分,但却是所有的Swift程序都必不可少的。所以,读者通过对本章学习,可以使用Swift编写最基本的程序,并对Swift提供的新特性深深地震撼。本节为大家介绍可选类型。

AD:

2.6  可选类型

可选类型也是Swift语言新添加的对象。主要是为了解决对象变量或常量为空的情况。在前面定义的变量和常量都不能为空。里面必须要有值。

Swift中的可选类型则允许变量(常量)中没有值(被设为nil)。要注意的是,Swift中的nil和Objective-C中的nil不一样。前者的nil表示没有值,而后者的nil表示变量值为空。

可选类型需要在类型后面加一个问号(?)。一个典型的例子是String类有一个toInt方法,该方法会将字符串转换为Int类型。不过这里就有一个问题,字符串中可能包含非数字的字符,这时就会转换失败。如果在其他语言中,不添加错误捕捉,可能会抛出异常,而在Swift中,如果转换失败,就直接返回nil。表示没有返回Int类型的值(反正你想加捕捉异常做不到,因为Swift中压根就没有异常捕捉)。这里的toInt方法返回的就是一个可选类型。

下面的代码将numStr中的值转换为Int类型的值,并输出该值。

  1. var numStr:String = "123"
  2. var value:Int? = numStr.toInt();  //  value必须定义为可选的Int类型,否则无法成功编译
  3. println(value)

如果将123改成会导致转换失败的值,如a123,那么执行上面的代码后就会输出nil了。

对于一个可选类型的变量或常量,通常在使用之前需要进行判断,例如,下面的代码会对value进行判断,如果确实转换成功(不为nil),则输出一行文本。

  1. if value != nil
  2. {
  3. println("转换成功")
  4. }

不过每次使用value变量时都进行判断很麻烦,所以,Swift添加了一个用于确定可选类型变量一定有值的感叹号(!)。当对value第一次判断后,如果能确认该变量已经被赋了值,后面就可以直接在value后加感叹号使用该变量了。

  1. println(value!)

如果在可选类型变量(常量)后面加感叹号,当变量(常量)为nil时,程序会中断,并在终端输出如下的信息。

  1. fatal error: unexpectedly found nil while unwrapping an Optional value

所以在可选变量(常量)后面加感叹号时,要确保该变量(常量)中一定有值。

现在已经知道了,在引用可选类型变量(常量)时,后面加感叹号是为了在该变量(常量)中没有值(为nil)时抛出运行时异常。那么每次都加感叹号也挺麻烦,所以干脆在定义可选类型变量(常量)时将问号改成感叹号,这样就可以直接引用这些可选类型变量和常量了。

  1. var numStr:String = "123"
  2. var value:Int! = numStr.toInt();  //  value必须定义为可选的Int类型,否则无法成功编译
  3. //  即使value后面不加!(当然,加!也没问题),当value为nil时以后抛出异常
  4. println(value)

注意 在使用可选类型变量(常量)时,如果使用问号(?)来定义,并且单独使用这些变量和常量,后面是可以不加感叹号(!)的。但要让这些变量和常量和其他的值通过操作符进行操作,那就必须要加感叹号了。如下面的代码是合法的。

  1. var numStr:String = "123"
  2. var value:Int! = numStr.toInt();
  3. println(value)    //  如果value为nil,则会输出nil

但下面的代码就无法成功编译了。

  1. var numStr:String = "123"
  2. var value:Int! = numStr.toInt();
  3. println(value + 4)//  编译失败,value必须写成value!,或在定义value时使用“!”
时间: 2024-10-24 16:00:51

[swift]可选类型的相关文章

Swift 可选类型(补充)

// 可选类型 // 可选类型: 这个值要么存在等于X,要么这个值根本就不存在 var serverResponseCode : Int? = 404 // ?的意思是这个只存在为404,要么这个值就不存在为nil let possbileNumber = "123" // let coverNumber: Int? = possbileNumber.toInt() var responseCode: Int? = 404 // 要么存在为404 responseCode = nil 

Swift可选类型和可选链

一.可选类型 有时候在Swift程序的表达式可以看到?和!等符号,它们代表的含义是什么,这些符号都和可选类型有关. 有时候使用一个变量和常量,它保存的值可能有也可能没有 1.比较给一个变量赋值nil,需要下面的表达式赋值 class Empoyee{ var  int : = 0 var name:String = "" var job : String ="" } var emp : Employee? = nil //后面加上?号可以接受空值,不加?不能赋予空值

Swift 可选类型-备

我们先看看如下代码:   var n1: Int = 10 n1 = nil         //编译错误 let str: String = nil    //编译错误 Int和String类型不能接受nil的,但程序运行过程中有时被复制给nil是在所难免的,Swift为每一种数据类型提供一种可选类型(optional),即在某个数据类型后面加上问号(?)或感叹号(!),修改前文示例代码:   var n1: Int? = 10 n1 = nil let str: String! = nil

swift可选类型_09_optional基本使用

//: Playground - noun: a place where people can play import UIKit //1.Swift中的变量或者常量必须经过初始化或者赋值后才能使用 var myInt:Int myInt = 1 print(myInt) //2.使用可选类型来处理一个常量或者变量的值可能缺失的情况 let correctStr = "123" var correctInt = Int(correctStr) let wrongStr = "

Swift - 可选类型说明

可选类型是Swift的一个特色.它表示一个变量有可能有值,也可能没有值(nil). 声明的方式是“数据类型+问号”. 而当要使用一个可选类型的变量是,要在后面加感叹号“!”. 1 2 3 4 5 6 7 8 9 var height:Int?  //声明一个可选类型,默认值为nil if height == nill{     println("你有多高?") }else{     println("你有\(height!)高.") } height = 199 /

swift 可选类型(optional)--- swift 入门

一.思维导图 二.代码 //这样无形中就会让代码很丑陋 if x != nil && y != nil { print("x或y都不等于空") } print("x或y有一个为空") //1 使用?? let name:String? = "我最帅" let age:Int = 18 //??代表可选型解包 //下面两个执行结果由于值的变化而表现的不一样, print(name ?? "" + String(a

Swift入门(四)——可选类型(Optionals)与断言(Assert)

可选类型是什么? 首先看一个问题,Swift中String类型的变量有一个叫做toInt的方法,可以把String类型变量转换为Int类型变量. var stringValue = "5" var intValue = stringValue.toInt(); println("intvalue = \(intValue)") 执行以上方法后得到了奇怪的结果: intvalue = Optional(5) 其实,可以发现,toInt方法的返回值并不是Int,而是In

Swift学习-----可选类型

可选类型 * 可选类型表示变量可以有值, 也可以没有值 * C 和 Objective-C 中并没有可选类型这个概念 * Swift中只有可选类型才可以赋值为nil * 如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为nil * 格式: Optional<类型> 或 在类型后面加上?号 可选类型的取值是一个枚举 * None 没有值 * Some 有值 * 由于可选类型在Swift中随处可见, 所以系统做了一个语法糖, 在类型后面加上? 注意: * nil不能用于非可选的常量和变

swift中的可选类型

前几天转了一篇介绍?和感叹号的文章,现在自己搞明白了,记录一下! 1.swift中的可选类型变量表示这个变量可能有值,也可能为空.你可能会想这个直接用一个指针不就搞定了么?但swift是不支持指针的.(这个解释有些牵强,但是在给一个普通变量赋值为nil的时候,会出现语法错误) . 2.问号和叹号都能声明swift中的可选类型变量,比如: var num : Int? = 10 var num1 : Int! = 11 3.上边的两中声明方式是有区别的 问号声明的变量 在使用的时候必须强制解包赋值