每一天学1些斯威夫特

/*

/*

概念:

一.可选和nil

可选值: optionals 有三种意况:

可选值: optionals 有三种意况:

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

一.在其余类型的前边紧跟?就能够表示它是可选类型。可选类型的变量能够用来拍卖“值缺点和失误”的情状。

每一天学1些斯威夫特。一.有值 二.从未有过值, 没有值便是nil

一.有值 二.尚无值, 未有值正是nil


贰.先看三个轻松的例子:

*/

*/

  • 可选类型是2个饱含三种状态的枚举值: None 和 Some ,
    用来表示大概有值(Some) 或恐怕未有值(None)

    • nil 正是Optional.None, 当你声澳优(Ausnutria Hyproca)(Karicare)个可选变量, 可能可选属性的时候,
      未有提供开端化值, 它的值默以为 nil
    • 非nil 就是Optional.Some

var str = “abcdef”

 

 


var num : int = str.toInt();

//有值

//有值

  • 任何类型都得以明显的扬言为可选类型, 当声Bellamy(Bellamy)个可选类型的时候,
    要确定保障用括号给” ? ” 操作符三个相宜的范围. 例如: 申明可选整数数组,
    格式为: (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的值是“1二三”,则会转成功,像那里则会转退步。转换失败时正是值缺点和失误的情状,斯维夫特命全权大使用nil来代表“值缺点和失误”的情况。

var optValue2: Int?

var optValue2: Int?

留意: 假设可选类型在一贯不赋值的境况下, 实行强制解包, 会导致崩溃

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

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


  • 电动分析(隐式解包)
    • 在宣称可选变量时, 使用 ” ! ” 号来替换 ” ? “,
      那样可选变量在运用时, 就不须要在加2个 ” ! “进行强制解包了,
      它会自动解包.
    • 隐式解析可选类型和可选类型同样, 都以有值和尚未值(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("可选类型无值")
}```

三.Swift中的nil与Object-C中的nil是一心不一致的。在Object-C中,nil代表七个并不设有的目的的指针。而在斯维夫特中,nil并不意味着指针,它是三个鲜明的值,用于表示“值缺失”,任何类型的值都得以被赋值为nil。

var optValue3: Int? = nil

var optValue3: Int? = nil

4.唯有可选类型的变量或然常量技术经受nil。别的品种的变量或常量无法接受nil。

 

 

伍.假设宣称的3个可选类型的变量恐怕常量未有点名初叶值,它将会活动安装为nil。

/*

/*

举个栗子:var name : String?;

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

可选值能够用if语句来进展判定

六.可选类型是斯维夫特中的新特征,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,不可能拓展解析”)

可选绑定:

可选绑定:

}

为了安全的分析可选类型的值, 1般情况下利用可选绑定

为了安全的分析可选类型的值, 壹般景况下使用可选绑定

二.可选绑定接济变量,也支撑常量。要采取常量时,将根本字var改为let就能够。

假设optValue未有值就不会做其余操作,
假诺opValue有值会再次来到并将optValue的值赋值给result实践大括号中的内容

要是optValue没有值就不会做任何操作,
就算opValue有值会重返并将optValue的值赋值给result奉行大括号中的内容

肆.隐式可选类型

*/

*/

一.除了在任意的已有项目后加多?来代表可选类型外,斯威夫特中还足以在随意的已有档次后加多惊叹号!来代表可选类型。—可选类型的另一种写法。

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!则不须求加!后缀,Swift会自动举办隐式解析。

}

}

举个栗子:

 

 

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(“无法拓展解析”)

}

伍.内需表达的是,隐式可选类型主要用于定义那么些被赋值之后不会再一次产生nil的变量。尽管一个变量在程序运营时期会重新成为nil,那么应该用平时的可选类型来定义变量。

伍.类型别称

1.
Swift提供了近乎C语言中typedef的效用,可感到***早已有个别体系***澳门葡京备用网址,钦点二个可读性更加强的名字—重命名。

  1. 斯威夫特命全权大使用typealias来定义类型小名:

typealias myInt = Int

typealias myString = String

var age : myInt = 17;

var name : myString = “swift”

叁.个体感觉:类型外号并无卵用。。。。

相关文章

发表评论

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

*
*
Website