美文网首页
每天学一点Swift----可选类型

每天学一点Swift----可选类型

作者: 冯可乐同学 | 来源:发表于2017-05-11 20:07 被阅读23次

一.可选和nil

1.在任何类型的后面紧跟?即可表示它是可选类型。可选类型的变量可以用来处理“值缺失”的情况。

2.先看一个简单的例子:

var str = "abcdef"

var num : int = str.toInt();

由于str转换为Int时有可能会失败,故num可能会没有值,因此不能用Int类型来声明num,应该用可选类型。如下:

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

如果str的值是“123”,则会转成功,像这里则会转失败。转换失败时就是值缺失的情况,Swift使用nil来代表“值缺失”的情况。

3.Swift中的nil与Object-C中的nil是完全不同的。在Object-C中,nil代表一个并不存在的对象的指针。而在Swift中,nil并不代表指针,它是一个确定的值,用于表示“值缺失”,任何类型的值都可以被赋值为nil。

4.只有可选类型的变量或者常量才能接受nil。其他类型的变量或常量不能接受nil。

5.如果声明的一个可选类型的变量或者常量没有指定初始值,它将会自动设置为nil。

举个栗子:var name : String?;

6.可选类型是Swift中的新特性,C语言和Object-C中没有的。

二.强制解析

1. Int类型和Int?类型并不是相同的类型,程序不能直接把Int?类型的变量或常量当成Int类型来使用。

2.为了获取可选类型的变量或常量中实际存储的值,可在变量和常量后添加英文感叹号!。这种添加感叹号进行解析的用法被称为强制解析(forced unwrapping)。

3.这个感叹号表示:已知该可选变量有值,请读取其中的值。

举个栗子:var str : String? = "abcedf"

var s : String = str----这是错误的。

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

4.需要注意的是:Swift的强制解析是有前提的,即可选类型的变量或常量必须有值时才能解析成功,否则将会导致运行错误。

因此,在进行强制解析时,建议用if语句判断可选类型是否有值。举个栗子:

var str : String? = "abcdef"

if str != nil

{

var s = str!

}else{

print("str为nil,不能进行强制解析")

}

三.可选绑定

1.可选绑定用于判断可选类型的变量或常量是否有值,如果可选类型的变量或常量有值就赋值给另一个临时变量。可选绑定用在if分支或

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

var str : String? = "abcdef"

if var tmp = str----此处不需要感叹号

{

print(tmp)

}else{

print("str的值为nil,不能进行解析")

}

2.可选绑定支持变量,也支持常量。要使用常量时,将关键字var改为let即可。

四.隐式可选类型

1.除了在任意的已有类型后添加?来表示可选类型外,Swift中还可以在任意的已有类型后添加感叹号!来表示可选类型。---可选类型的另一种写法。

2.比如:Int类型的变量,只能接受Int型的值;

Int?类型的变量既可以接受Int型的值,也可以接受nil;

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

3. Int?和Int!类型的区别:当程序要获取可选类型变量的值的时候:对于Int?要进行强制解析时需要加!后缀,而对于Int!则不需要加!后缀,Swift会自动进行隐式解析。

举个栗子:

var s1 : String? = "abcdef"

var s11 = s1!

var s2 : String! = "abcdef"

var s22 = s2

4.在隐式可选类型的变量没有值的情况下,获取该变量的值同样会导致运行时错误,所以也要进行判断。举个栗子:

var name : String!;

name = "abcdef"

if name != nil

{

var tmp = name;

}else

{

print("不能进行解析")

}

5.需要说明的是,隐式可选类型主要用于定义那些被赋值之后不会重新变为nil的变量。如果一个变量在程序运行期间会重新变为nil,那么应该用普通的可选类型来定义变量。

五.类型别名

1. Swift提供了类似C语言中typedef的功能,可以为***已经有的类型***指定一个可读性更强的名字---重命名。

2. Swift使用typealias来定义类型别名:

typealias myInt = Int

typealias myString = String

var age : myInt = 17;

var name : myString = "swift"

3.个人认为:类型别名并无卵用。。。。

相关文章

  • 每天学一点Swift----可选类型

    一.可选和nil 1.在任何类型的后面紧跟?即可表示它是可选类型。可选类型的变量可以用来处理“值缺失”的情况。 2...

  • 每天学一点Swift----元组(tuple)类型

    1.元组(tuple)使用圆括号把多个值组合成一个复合值,******元组内的值可以使用任意类型,元组并不要求元组...

  • 每天学一点Swift----函数(一)

    1. Swift中支持嵌套函数。 2.与函数紧密相关的另一个概念是闭包,闭包的本质是匿名函数,闭包可以作为表达式,...

  • 每天学一点Swift----集合(一)

    1. Swift的集合是一种特别有用的工具。Swift提供了数组和字典两种集合类型来存储集合数据。数组用于按顺序存...

  • 每天学一点Swift----集合(二)

    三.字典:字典中以key-value的形式保存数据,所以同一个字典中key不能重复。 1.声明字典--两种方式 (...

  • 每天学一点Swift----函数(二)

    三.函数类型 1. Swift的每个函数都有类型的,函数类型由函数的形参列表,返回值类型组成。 2.使用函数类型定...

  • 每天学一点Swift----闭包(三)

    八.捕获上下文中的变量和常量 1.闭包可以用访问或修改闭包所在上下文中的变量或常量(对于常量只是访问),这个过程被...

  • 每天学一点Swift----闭包(二)

    七.闭包表达式 1.调用闭包(使用闭包返回值):闭包的本质是功能更加灵活的代码块,因此完全可以将闭包赋值给变量(联...

  • 每天学一点Swift----闭包(一)

    五.嵌套函数 1. Swift还支持在函数体内定义函数,这种在函数体内定义的函数称为嵌套函数 2.默认情况下,嵌套...

  • 每天学一点Swift----泛型(一)

    一.泛型的作用 1.泛型是一种非常灵活的语法,泛型允许程序在函数、枚举、结构体、类中定义类型形参,这种类型形参实际...

网友评论

      本文标题:每天学一点Swift----可选类型

      本文链接:https://www.haomeiwen.com/subject/crkatxtx.html