可选类型

By admin in 4858.com on 2019年4月22日

/*

/*

概念:

一.可选和nil

可选值: optionals 有两种状态:

可选值: optionals 有两种意况:

  • 在Swift中可选类型(Optionals),用 ” ? ” 号表示, 用于拍卖值缺点和失误的情形.
    表示”该处有贰个值, 切它等于X”, 可能表示”该处未有值”

一.在其余项目标前面紧跟?就可以表示它是可选类型。可选类型的变量能够用来管理“值缺点和失误”的景色。

可选类型。一.有值 贰.未有值, 未有值正是nil

一.有值 二.从未值, 未有值就是nil


二.先看三个大约的例子:

*/

*/

  • 可选类型是2个带有二种境况的枚举值: None 和 Some ,
    用来表示恐怕有值(Some) 或或者没有值(None)

    • nil 正是Optional.None, 当你声美素佳儿个可选变量, 也许可选属性的时候,
      未有提供初叶化值, 它的值默以为 nil
    • 非nil 就是Optional.Some

var str = “abcdef”

 

 


var num : int = str.toInt();

//有值

//有值

  • 别的项目都得以显明的扬言为可选类型, 当声惠氏(Nutrilon)个可选类型的时候,
    要确定保证用括号给” ? ” 操作符八个恰如其分的范围. 举例: 表明可选整数数组,
    格式为: (Int[])?, 假如写成”Int[]?”, 就会报错

出于str转变为Int时有相当大希望会倒闭,故num或然会未有值,由此无法用Int类型来声称num,应该用可选类型。如下:

var optValue1: Int? = 9

var optValue1: Int? = 9

代码示例

var num : Int? = str.toInt();

//没有值

//没有值

# 定义一个可选类型: 这两种声明方式是相等的
var Optional_1:Int?        //注意: 在数据类型和" ? "号之间没有空格
var Optional_2:Optional<Int>```
***
*  其中" ! " 号, 用来表示强制解包, 如果可选类型实例包含一个值, 可以用" ! "号来访问这个值. 如果可选类型的变量没值时对其强制解包,程序就会崩溃 。所以,强制解包是非常危险的

>######代码示例

如若str的值是“12三”,则会转成功,像那里则会转失利。转变战败时正是值缺点和失误的情状,Swift使用nil来代表“值缺点和失误”的情况。

var optValue2: Int?

var optValue2: Int?

留神: 要是可选类型在并未赋值的场地下, 举行强制解包, 会导致崩溃

var intNumber:Int? = 8
var result1 = intNumber //打字与印刷结果为 Optional(八) , 是Optional类型的值
var result2 = intNumber! // 8
print(result1, result2)

崩溃实例
//上边定义的Optional_1并从未给定数值, 所以举办强制解包会导致崩溃
var option_1 = Optional_1!
print(option_1)“`


  • 活动分析(隐式解包)
    • 在证明可选变量时, 使用 ” ! ” 号来替换 ” ? “,
      那样可选变量在利用时, 就不需求在加二个 ” ! “实行强制解包了,
      它会自动解包.
    • 隐式解析可选类型和可选类型一样, 都是有值和未有值(nil)二种结果.
    • 区分在于赋值/取值时, 隐式解析可选类型不需求再强制解包
    • 留神: 隐式解包可选类型的变量未有值时, 程序同样会崩溃
代码示例

var IntNumberOne:Int! = 10
var result三 = IntNumberOne //在选用值时, 不须求再解包, 直接采取
print(result3)“`


  • 可选绑定
    如果不确定可选类型变量是否有值时,用可选绑定,不需要对可选类型强制解包

    • 可选绑定: 用来判断, 可选类型是还是不是带有值,
      借使包罗就把值赋给三个临时常量/权且变量.
    • 可选绑定能够用在if 和 while 语句中, 来对可选类型的值实行剖断,
      并把它赋给1个常量/变量
代码示例
//定义一个可选类型的变量
var intNumberTwo:Int?
//判断可选变量是否有值, 如果有值则赋给临时变量intNumber
if var intNumber = intNumberTwo{
    print("可选类型有值 = ", intNumber)
}else{   
    print("可选类型无值")
}```

3.斯维夫特中的nil与Object-C中的nil是一心差别的。在Object-C中,nil代表二个并不设有的对象的指针。而在Swift中,nil并不代表指针,它是一个分明的值,用于表示“值缺点和失误”,任何类型的值都得以被赋值为nil。

var optValue3: Int? = nil

var optValue3: Int? = nil

4.唯有可选类型的变量只怕常量才具承受nil。其余品类的变量或常量无法经受nil。

 

 

5.即便声称的2个可选类型的变量或许常量未有点名起头值,它将会自行安装为nil。

/*

/*

举个栗子:var name : String?;

可选值能够用if语句来举行判别

可选值能够用if语句来张开决断

六.可选类型是Swift中的新特色,C语言和Object-C中从未的。

*/

*/

2.强制解析

var optValue4: Int?

var optValue4: Int?

一.
Int类型和Int?类型并不是如出一辙的门类,程序不能间接把Int?类型的变量或常量当成Int类型来采纳。

if optValue4 != nil

if optValue4 != nil

贰.为了取得可选类型的变量或常量中实际上存款和储蓄的值,可在变量和常量后增加英文感叹号!。那种拉长惊叹号举行解析的用法被号称强制解析(forced
unwrapping)。

{

{

三.那么些惊叹号表示:已知该可选变量有值,请读取当中的值。

    print(optValue4)

    print(optValue4)

举个栗子:var str : String? = “abcedf”

}else

}else

var s : String = str—-那是不当的。

{

{

var s : String = str!—-对可选类型举行强制解析,准确。

    print(optValue1)

    print(optValue1)

肆.急需注意的是:斯维夫特的强制解析是有前提的,就能够选类型的变量或常量必须有值时手艺分析成功,不然将会促成运营错误。

}

}

所以,在开始展览强制解析时,提出用if语句判别可选类型是或不是有值。举个栗子:

 

 

var str : String? = “abcdef”

/*

/*

if str != nil

领取可选类型的值(强制解析)

领到可选类型的值(强制解析)

{

会将optValue中的整型值强制拿出去赋值给result,
换言之正是告诉编写翻译器optValue一定有值, 因为可选类型有三种状态
有值和未有值, 所以告诉编写翻译器到底有没有值

会将optValue中的整型值强制拿出来赋值给result,
换言之正是报告编译器optValue一定有值, 因为可选类型有二种意况有值和未有值, 所以告诉编写翻译器到底有未有值

var s = str!

亟待专注的是只要强制解析optValue,
可是optValue中尚无值时会引发三个运维时不当

亟需专注的是只要强制解析optValue,
但是optValue中绝非值时会引发四个运作时不当

}else{

*/

*/

print(“str为nil,无法拓展强制解析”)

var optValue5: Int? = 10

var optValue5: Int? = 10

}

var result1: Int = optValue5!

var result1: Int = optValue5!

叁.可选绑定

print(result1)

print(result1)

1.可选绑定用于判定可选类型的变量或常量是或不是有值,倘诺可选类型的变量或常量有值就赋值给另多少个目前变量。可选绑定用在if分支或

 

 

while循环中对可选类型的值进行判断。举个栗子:

//报错:

//报错:

var str : String? = “abcdef”

//var optValue6: Int?

//var optValue6: Int?

if var tmp = str—-此处不须求惊讶号

//var result2: Int = optValue6!

//var result2: Int = optValue6!

{

//print(result2)

//print(result2)

print(tmp)

 

 

}else{

/*

/*

print(“str的值为nil,不能够举办分析”)

可选绑定:

可选绑定:

}

为了安全的剖析可选类型的值, 一般景况下接纳可选绑定

为了安全的解析可选类型的值, 一般情状下选择可选绑定

2.可选绑定帮助变量,也支撑常量。要利用常量时,将首要字var改为let就能够。

1旦optValue未有值就不会做任何操作,
假如opValue有值会再次来到并将optValue的值赋值给result实践大括号中的内容

假定optValue未有值就不会做此外操作,
如若opValue有值会再次回到并将optValue的值赋值给result试行大括号中的内容

四.隐式可选类型

*/

*/

1.除了在自由的已有项目后增添?来表示可选类型外,斯威夫特中还足以在随机的已有等级次序后增多惊叹号!来表示可选类型。—可选类型的另一种写法。

var optValue7: Int? = 11

var optValue7: Int? = 11

二.例如:Int类型的变量,只可以承受Int型的值;

if let result3 = optValue7

if let result3 = optValue7

Int?类型的变量既能够承受Int型的值,也得以接受nil;

{

{

Int!类型的变量既尚可Int型的值,也足以承受nil。

    print(result3)

    print(result3)

三.
Int?和Int!类型的区分:当程序要获得可选类型变量的值的时候:对于Int?要开始展览强制解析时供给加!后缀,而对此Int!则不须求加!后缀,斯维夫特会自动进行隐式解析。

}

}

举个栗子:

 

 

var s1 : String? = “abcdef”

var s11 = s1!

var s2 : String! = “abcdef”

var s22 = s2

四.在隐式可选类型的变量未有值的动静下,获取该变量的值同样会招致运转时不当,所以也要开始展览判别。举个栗子:

var name : String!;

name = “abcdef”

if name != nil

{

var tmp = name;

}else

{

print(“不可能拓展分析”)

4858.com ,}

五.急需证实的是,隐式可选类型首要用于定义那个被赋值之后不会再也成为nil的变量。要是3个变量在程序运营时期会再次成为nil,那么应该用普通的可选类型来定义变量。

5.类型小名

一.
斯威夫特提供了接近C语言中typedef的职能,可认为***业已局地项目***钦命三个可读性更加强的名字—重命名。

  1. Swift使用typealias来定义类型外号:

typealias myInt = Int

typealias myString = String

var age : myInt = 17;

var name : myString = “swift”

3.民用以为:类型外号并无卵用。。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有