美文网首页
4. 更多类型

4. 更多类型

作者: quitus | 来源:发表于2017-03-16 12:34 被阅读9次

转载自http://wanwu.tech/2017/03/05/types/
我们已经学习了基本的数据类型及其使用方法,也知道了我们有什么运算符可用。如同上一章的问题,我们知道了怎么表达有两个苹果,但是怎么表达我的名字叫小明呢?

这个时候,我们就涉及到了新的数据类型:字符串。这一章,我们首先会介绍什么是数据类型,然后介绍更多数字相关知识和字符串。

数据类型

数据类型是一种属性,用于指定数据的种类,比如我们上一章介绍的整数、浮点数。一个数据,有数据类型,同时也有一个相应的名称和值(或者属性)。上一章中,下面的代码创建了一个数据类型为Int,名称为numberApple,值为10的数据。

let numberApple: Int = 10

类似的,下面的代码创建了数据类型为Double,名称为price,值为5.2的数据。

let price: Double = 5.2

类型推断

现在,看一下我们的代码

let numberApple: Int = 10
let price: Double = 5.2

如果我按下面这样写(不指明数据类型),你能猜出来两个数据分别是什么数据类型吗?

let numberApple = 10
let price = 5.2

提示:根据等号右边的数据有没有小数点来判断

相信大家都可以猜出来吧?Swift也能!这个猜测的过程叫做类型推断

那么,我们如果想确定Swift的推断是否符合我们的心意怎么办呢?一个方法是点击右上角面板控制器的

,使其成蓝色激活状态,打开右边框。鼠标点击想要查看的变量或者常量的位置,右边栏会出现其具体信息。或者也可以按住Option键,鼠标点击,也可看到弹出框显示具体信息。

那么什么时候可以使用类型推断什么时候不行呢?一般来说你能猜出来,Swift就能猜出来。你猜不出来,Swift也难猜出来。

数据类型转换

接下来,我们如果想对价格(price)取整呢?可以这样吗?

let price: Double = 12.5
var priceInteger: Int = 0
priceInteger = age

我们的Playground会报错:

Cannot assign value of type 'Double' to type 'Int'。

并且会有修改建议:

Fix-it Replace "price" with "(Int)price"。

双击接受这条建议,我们发现,代码变为了:

priceInteger = Int(price)    // => 12

以上发生了什么事情呢?开始的报错,因为Swift不允许你将一个“Double”数据隐式(悄悄地,不公开说明)地转变为“Int”。推荐的修改建议是说,你要显式(公开)地说明,你想把“Double”转变为“Int”。

为什么呢?我们的price值为5.2,那么它转为“Int”后,小数怎么处理呢?如果采用显式转换Int(age),Swift如同得到了你的授权,它将把小数直接忽略。但是如果反过来,“Int”转为“Double”呢?

price = priceInteger

我们发现,还是不行!,因为swift是一门强类型语言,它不允许任何隐式的数据转换

所以上面代码必须改为:

price = Double(priceInteger)

由以上两个例子,我们可以总结出,如果进行数据转换的话,其形式应该是:

目标数据类型的数据 = 目标数据类型(待转换数据)

操作多种数据类型

我们已经知道了苹果的数量,如果我们再知道苹果的单价,那么我们就可以计算出苹果的总价了吧:

let numberApple: Int = 10
let price: Double = 5.2
let totalPrice: Double = numberApple * price

Playground中尝试,你应该会发现报错:

Binary operator '*' cannot be applied to operands of type 'Double' and 'Int'

这是为什么呢?因为numberApple是“Int”数据,而price是“Double"数据,不是一种类型。如果要计算,必须将他们转变为同一种数据类型。如果你想要结果为“Int”,那么就把price转变为“Int”再做计算。这里,我们的totalPrice是“Double”,所以我们应该将numberApple转为“Double”:

let numberApple: Int = 10
let price: Double = 5.2
let totalPrice: Double = Double(numberApple) * price

小练习

将上面计算总价的代码片段使用类型推断重写,并使用介绍的两种方法查看其推断类型。

字符串

在本章开始,我们要解决怎么表达我的名字叫小明的问题。这个时候,就轮到字符串String)数据类型出场了。

字符串定义

let name = "xiaoming"
let name2 = "小明"

上面的代码定义了两个名字,一个英文是“xiaoming”,另一个是中文的“小明”。等号左边的部分叫做字符串字面值,使用双引号括起来。

很明显,上面的代码我们靠类型推断来判断出以上两个常量是字符串,那么如果我们想显式声明呢,我们可以这样:

let name:String = "xiaoming"
let name2: String = "小明"

字符串操作

如果我们想要把名字分成“姓”和“名”分开存储,但是一起显示,可以怎么做呢,我们可以尝试下面方法把两个字符串用加号”+“加起来:

let firstName = "Meimei"
let lastName = "Han"
let fullName = firstName + lastName
print(fullName)

我们注意到这个方法是可行的,但是有一个人问题,英文的“姓”和“名”需要中间有空格,怎么办呢?我们中间加一个空格试试:

let fullName = firstName + " " + lastName

现在我们通过print(fullName)方法来打印全名,但是如果我想表达更完整信息呢,比如“我的名字叫某某,身高XXX”怎么办?

let firstName = "Meimei"
let lastName = "Han"
let height: Double = 1.72
let fullName = firstName + " " + lastName
print("My name is " + firstName + " and my height is " + String(height))

上面代码我们除了使用字符串相加,还使用了类型转换,将一个“Double”型常量转为了“String”。

但是有一个问题,你看双引号看晕了吗?说实话,写多了我已经有点晕了。那怎么办呢?试试下面方法:

print("My name is \(firstName) and my height is \(height)")

这里,我们使用了字符串插值的方法,大大简化了代码的书写,提高了可读性。值得注意的是,这里我们在做插值的时候,数字直接转为了字符串。

总结

  1. 更过数字类型的操作
  2. 类型转换
  3. 字符串基本操作

下一步

韩梅梅已经是一个大美女了,那么如果李雷还和她在一起,他们应该结婚了吧?(90,00后有兴趣可以百度韩梅梅和李雷的故事,我也想写你们的故事,但是我不知道啊。。。)

相关文章

  • 4. 更多类型

    转载自http://wanwu.tech/2017/03/05/types/我们已经学习了基本的数据类型及其使用方...

  • 4. 类型

    4. 类型 下面是 Go 支持的基本类型: bool 数字类型int8, int16, int32, int64,...

  • 4.浮点类型

    出自:http://www.xiaoboswift.com/course/54

  • 四 数据类型

    1.数字类型 2.字符串类型 3.列表类型 4.元组类型 5.字典类型 6.集合类型

  • QMUITipDialog的使用

    1. Loading类型 2. 成功类型 3. 失败类型 4. 信息提示类型 5. 自定义类型 xml文件: 只保...

  • Swift-常量变量类型

    常用基础类型 1.整数类型 2.小数类型(区别精度不同 Double > Float) 3.逻辑类型 4.字符串类...

  • 第3天 PHP数据类型及运算

    4. 数据类型 4.1. 数据类型分类与概述 4.1.1. 标量类型: 标量类型也可以理解为“基本类型”,“简单类...

  • 4.数据类型分类:

    一:基本数据类型 数值类型分为整数型和实数型两大类。 1、整数型整数型是指不带小数点和指数符号的数。按表示范围整数...

  • 4.集合类型[Collection Types]

    [The Swift Programming Language 中文版]本页包含内容: Swift 语言提供Arr...

  • 4. 空类型安全处理

    可空类型与非空类型 许多编程语言中最常见的陷阱之一,就是访问空引用的成员会导致空引用异常。在Java中,这等同于N...

网友评论

      本文标题:4. 更多类型

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