我是靠谱客的博主 外向期待,最近开发中收集的这篇文章主要介绍芒果iOS开发之Swift教程03-Swift基础,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【主要内容】

1. 布尔值

2. 元组

3. 可选类型

4. nil

5. if语句以及强制解析

6. 可选绑定

7.隐式解析可选类型

8.错误处理

9.断言


一、布尔值

在OC中布尔值类型叫做:BOOL,Swift中也有一个布尔(Boolean)类型,叫做:Bool。布尔类型的值只有真或假两种情况。在Swift中分别是:true和false:


常量isMan和isAsap都会被推断为Bool类型,因为true和false都是布尔类型字面量。

布尔类型一般用在条件控制语句里,比如:


这里要提一下,Swift确实要比OC更加安全,刚才定义了常量isMan是ture,Swift就提示我else判断永远不会执行。这样可以提前预防一些低级错误出现。


二、元组

元组(tuples)把多个值组合成一个复合值,元组内的值可以是任意类型,并不要求是相同类型。这个定义倒是有点像C语言里的结构体。

2.1 举个栗子,我们在开发的时候经常会返回用户信息,包含了许多参数:姓名,性别、年龄、身高等等。下边定义一个用户的所有信息的元组:

//定义了一个用户的元组,包含姓名、性别、年龄、身高                                                                                        let userInfo = ("芒果iOS", "M", 26, 183)
userInfo元组包含了两个String类型和两个Int类型的值。

2.2 你把可以把任意个数任意顺序任意类型的值组合起来变成一个元组。或者可以将元组分解成单独的变量或常量使用:

//把元组拆分成单独的常量或变量使用
let (user_name, user_gender, user_age, user_height) = userInfo
print("my name is (user_name)")
print("性别:(user_gender) n年龄:(user_age)n身高:(user_height)")
 

2.3 如果只需要一部分元组的值,在分解的时候可以把剩下的部分用下划线(_)标记:

//把一个元组部分分解
let car = ("Farrari 488", 388, "3.9T")
let (car_Name, _, _) = car
print("carName:(car_Name)")
2.4 此外还可以通过跟数组下标一样的方式访问元组中的单个元素:

//下标访问元组中元素
print("carPrice:(car.1)万")
print("carMars:(car.2)")  
2.5 你也可以在定义元组的时候给每个元素命名,然后可以通过名字来访问这个元素的值:
//定义元组的时候给单个元素命名:
let status = (statusCode: 200, message: "OK")
print("The Status is :(status.statusCode)")
print("The Message is :(status.message)")
注意:

元组跟结构体还是很像的,元组的话处理临时组织起来的值要比结构体更加简洁方便。但是对于结构体使用的范围和作用域要比元组更加强大。因此到底使用结构体还是元组要视情况而定。

三、可选类型

使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示:

1. 有值,等于x

2. 没有值

3.1举个栗子:

Swift有一个SomeType(ofInitialValue)构造函数,他可以将一种类型转换为另一种类型。比如将String类型的值转换为Int类型,但是转化的结果有两种情况:一种是数字类型的字符串,比如”789“可以转换成Int类型;第二种字符串类型”Mango“这样的就不行。

//3.可选类型optionals
let stringNum = "123"
let converNum = Int(stringNum)
print(converNum)


从图上可以看出常量converNum的类型被推断为Int?而不是Int。因为这个构造器方法可能转化失败。而Int?就表示返回值可能是Int类型,也可能没有Int类型,但是不会包含其他类型,只能是Int或者是没有。


3.2如何声明一个可选类型:

在声明可选类型变量或常量的时候只需要在类型后边加一个?,就表示某种类型的可选类型:


注意:

C和OC中没有可选类型这个概念。OC中有一个近似的类型nil,nil表示”缺少一个合法对象“。但是nil也有局限性只适合对象类型,对于非对象类型OC有一个NSNotFound来暗示值的缺失。但是在Swift中的Optionals可选类型可以代表任何类型的值缺失。

四、nil

你可以给可选变量、常量赋值为nil,表示它没有值:


我们声明了一个Int类型的可选变量errorCode,包括了一个可选的值404。下边有把可选变量errorCode赋值为nil,表示没有值。

注意:

nil只能用于可选类型的变量或常量赋值,对于非可选类型的常量或者变量如果用了nil,编译器会报错:


如果声明可选类型的变量没有赋值,他们被自动被设置为nil,我们定义了一个可选字符串类型变量yourGender没有给初始值,系统默认为nil。黄色的警告是提示变量yourGender值没有改变建议用常量,不用管这个警告:



注意:
Swift的nil和Objective-C中的nil并不一样。在Objective-C中,nil是一个指向不存在对象的指针,在Swift中,nil不是指针,它是一个确定的值用来表示值缺失。任何类型的可选状态都可以设置为nil。


五、if语句以及强制解析

你可以使用if语句和nil比较来判断一个可选值是否包含值。可以使用“相等==”或“不等!=”来比较。我定义了一个可选字符串类型常量containsString,赋初值Mango-iOS。

  


当确定可选类型有值之后,可以使用强制解析来获取值。强制解析(forced unwrapping)就是在可选变量的后边加一个感叹号(!):


注意:

使用!来获取一个不存在的可选值会导致运行时Crash。使用!来强制解析前一定要确定可选值不为空。

下边这样写运行时肯定Crash:



六、可选绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。

例如:


也可以包含多个可选绑定或多个布尔条件在一个 if 语句中,只要使用逗号分开就行:



七、隐式解析可选类型

隐式解析可选类型(implicitly unwrapped optionals)其实就是一个有值的可选类型。可选类型是可以有值也可以没有值两种情况。但是有时候,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的。

一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型来使用,并不需要每次都使用解析来获取可选值。下面用可选类型 String 和隐式解析可选类型 String 之间的区别:


也可以把隐式解析可选类型当做一个可以自动解析的可选类型。要做的只是声明的时候把感叹号放到类型的后面
注意:
如果你在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和你在没有值的普通可选类型后面加一个惊叹号一样会Crash。


八、错误处理

使用错误处理(error handling) 来应对程序执行中可能会遇到的错误条件。

相对于可选中运用值的存在与缺失来表达函数的成功与失败,错误处理可以推断失败的原因,并传播至程序的其他部分。当一个函数遇到错误条件,它能报错。调用函数的地方能抛出错误消息并合理处理。

一个函数可以通过在声明中添加throws关键词来抛出错误消息。当你的函数能抛出错误消息时, 你应该在表达式中前置try关键词:


一个do语句创建了一个新的包含作用域,可以把错误能被传播到一个或多个catch从句。

在开发过程中还会遇到对应多个错误条件的情况,这个时候try catch可以嵌套使用跟if else if 一样,当判断抛出哪个异常的时候就会执行哪个方法:



九、断言

9.1断言

可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然后,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能没办法继续执行。这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因。

9.2使用断言进行调试

断言会在运行时判断一个逻辑条件是否为true。从字面意思来说,断言“断言”一个条件是否为真。你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果条件判断为true,代码运行会继续进行;如果条件判断为false,代码执行结束,你的应用被终止。

如果你的代码在调试环境下触发了一个断言,比如你在Xcode中构建并运行一个应用,你可以清楚的看到不合法的状态发生在哪里并检查断言被触发时你的应用的状态。此外,断言允许你附加一条调试信息。

你可以使用全局assert(condition: Bool, message: String)函数来写一个断言。向这个函数传入一个结果为true或者false的表达式以及一条信息,当表示式结果为false的时候这条信息会被现实:


注意:


当代码使用Release模式编译的时候,断言将会被禁用,例如在 Xcode 中,使用默认的 target Release 配置选项来 build 时,断言会被禁用。

9.3何时使用断言

当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:

1. 整数类型的下标索引被传入一个自定义下标实现,但是下标索引值可能太大或者太小。

2. 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行

3. 一个可选值现在是nil,但是后面的代码运行需要一个非nil的值。

注意:

使用断言会让程序崩溃,所以你应当仔细设计你的代码来让非法条件不会出现。然而,在你的应用发布之前,有时候非法条件可能出现,这时使用断言可以快速发现问题。


欢迎大家关注“”芒果iOS微信公众账号,芒果会经常为大家分享好的技术文章:


最后

以上就是外向期待为你收集整理的芒果iOS开发之Swift教程03-Swift基础的全部内容,希望文章能够帮你解决芒果iOS开发之Swift教程03-Swift基础所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部