首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS Swift基础语法(二)

iOS Swift基础语法(二)

作者头像
傅_hc
发布2018-07-04 09:37:14
1.1K0
发布2018-07-04 09:37:14
举报
2、基本数据类型

这里介绍一下Swift的基本数据类型:整数、浮点数、布尔型、可选型和元组,其它较复杂的后面再介绍。Swift中的数据类型的首字母都是大写的。

2.1、整数

整数的定义为没有小数部分的数字,可以带有正负号,Swift提供了IntUInt两种整数类型,分别表示有符号和无符号的整数类型。在IntUInt后面可以带有数字8、16、32和64,以表示8、16、32、64位的整数。另外,整数类型都有属性maxmin,分别表示不同整数类型的最大值和最小值,在Swift中访问属性采用“点方法”。

Int8 与 UInt8 类型

2.2、浮点数

浮点数是指有小数部分的数字,比如3.1415926。Swift提供了两种浮点数类型:FloatDouble,Float表示32位浮点数,而Double表示64位浮点数,选择哪种类型的浮点数取决于你对精度的要求。

2.3、布尔型

Swift提供了一个非真即假的逻辑类型--布尔类型(Bool)。布尔类型有两个常量:truefalse。需要注意的是,Swift中的布尔类型不同于OC中的BOOL类型,不再接受0代表false、1代表true的用法,如下代码所示。

//正确
if true {
    let num = 1
}
//错误
if 1 {
    let num = 1
}
2.4、元组类型

元组是Swift中非常好用的一个数据类型,它可以把多个值成员复合成一个值,并且这些成员的数据类型可以不同,把成员值放到一个括号中,以逗号分隔。比如一个学生的身份信息:

let message = ("小傅","18","高三一班")

这个元组类型就可以表达出一个高三一班名叫小傅的18岁同学,结构非常精简。元组中的每个成员值都有一个默认的索引,我们可以通过索引直接获取元组中各部分的值,比如:

let name = message.0
let age = message.1
let grage = message.2

playground中显示如图2.4所示

图2.4

我们可以自定义每个成员变量的名字,格式为(成员名称1:成员值1,成员名称2:成员值2,······),调用的时候可以使用名称调用:

let message2 = (name:"小傅",age:"18",grade:"高三一班")
let name2 = message2.name
let age2 = message2.age
let grade2 = message2.grade

另外,如果想要获取元组中的某些重要部分加以利用,忽略一些不重要的信息时,可以把元组的值传递到一个新的元组中,在新元组中声明那些接受重要值的值成员,而不重要的使用下划线“_”表示忽略。例如上例中,只关心学生信息的学生姓名,那么可以使用下面的语句,元组中的成员可以直接当作常量和变量使用:

let (showName,_,_) = message2
print("Name is \(showName)")
2.5、可选型

可选型用于某些不确定是否有值的情况,其有两个返回值:具体的值和nil,nil表示空值。OC中没有可选型这种数据类型,可选型是Swift都有的。定义可选型只需在常规类型后面加一个问号?即可,例如:

var age : Int?

这样,age就被定义成一个可选型,如果它有值,就一定会返回一个Int类型的值,否则返回nil。可选型经常被用作搜索或者转型方法的返回值类型,这是因为在搜索和转型中经常出现失败的情况。介绍一个转型的例子,在Swift中,String类型可以和Int类型的实例相互转换,你可以把诸如"12"这样的字符串转换成Int,但是不能转换“小明”这样的字符串,Swift风格的转型使用构造器。如图2.5所示。

图2.5

值得注意的是,age在定义为Int类型的可选型之后被赋予了一个默认的初始值nil,这也是可选型的一个好处之一。 看一下下面的代码:

var age : Int?
age = Int("12")
print("age is \(age)")

你可能认为代码第三行应该输出的应该是“age is 12”,但是实际情况并不是这样,如图2.6所示。

图2.6

在输出语句中我们得到的age的值显示为Optional(12),Optional代表可选,age的当前值为一个整数类型的可选型。在实际开发中我们真正需要的是括号中的12,想要获取这个12,就需要使用“解包”操作。 解包是针对于可选类型的变量操作,当我们确定一个可选型的值不为nil的时候,可以使用解包获取其中的值。它的表现形式也非常简单,在需要进行解包的变量名后面加上一个感叹号。现在对age变量进行解包,效果如图2.7所示。

图2.7

最后需要指出的是,声明一个可选型虽然可以通过编译器设置的安全性检查,但是如果你不慎忘记在之后对其赋值,那么在解包的时候程序就会崩溃。所以我们在声明一个对象的时候,尤其是声明类或者结构体的属性的时候,应该三思而后行,尽可能为其赋初始值,当然这个初始值应该是明显区别于正常值的。再把可选型转换成非可选型的赋值语句中经常用到“??”操作符,“??”之前为一个可选型,“??”之后为一个非可选型的值。“??”操作符自带解包功能,在赋值时“??”会检查其之前的可选型:如果可选型不为nil,则将其解包并返回;如果其为nil,则不会返回nil,则此时返回“??”之后的非可选型的值。使用“??”改造上面的代码,如下所示:

var age:Int //这里避免解包,声明age为非可选型
age = Int("12") ?? -1
print("age is \(age)") //转型成功
age = Int("小明") ?? -1
print("age is \(age)") //转型失败

运行结果如图2.8

图2.8 “??操作符”

由于在真实的数据环境中年龄不可能为负数,此时当我们看到age为-1的时候就知Int(String)转型失败了。 Swift提供了一种更安全的解包方式:可选绑定。可选绑定有两种格式可选:if-letguard-let-else。首先来看if-let结构:

var age:Int? = Int("12")
if let a = age {
    print(a)
}

类似于if语句,当age不为空的时候,对age解包并给其一个“别名”a,在if后的大括号中对a才有效果,此时a的值为12,已经解包。如果agenil,那么大括号中的代码不会执行,使用可选解包程序不会崩溃。guard-let-elseSwift2.2新引入的格式,示例如下:

var age:Int? = Int("12")
func findA() {
    guard let a = age else {
        print("终止方法")
        return //终止方法
    }
    print(a) //在外部使用解包后的值
}

不同于if-let,guard-let-else首先处理agenil的情况,在此种情况中必须在大括号中使用return或者break提前终止代码。这里不管有多少个guard-let-else,别名a的作用域都在最外层,有效地避免了过于深入的嵌套。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.07.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、基本数据类型
    • 2.1、整数
      • 2.2、浮点数
        • 2.3、布尔型
          • 2.4、元组类型
            • 2.5、可选型
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档