前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift入门: 数据类型

Swift入门: 数据类型

作者头像
韦弦zhy
发布2020-03-19 20:42:32
7830
发布2020-03-19 20:42:32
举报
\color{red}{\Huge \mathtt{SWIFT}}
\color{red}{\Huge \mathtt{SWIFT}}
\color{orange}{\Large \mathbf{数据类型}}
\color{orange}{\Large \mathbf{数据类型}}
\underline{\color{#3399CC}{\large \mathit{Types \ of \ Datas}}}
\underline{\color{#3399CC}{\large \mathit{Types \ of \ Datas}}}

数据种类繁多在Swift中是单独处理他们的。在给变量赋值时,您已经看到了最重要的类型之一,但在Swift中,这称为Swift(字面上是字符串)。

字符串可以是长的(例如一百万个字母或更多)、短的(例如10个字母)甚至是空的(没有字母),这无关紧要:它们在Swift眼中都是字符串,工作原理都是一样的。Swift知道名字应该包含一个字符串,因为当你创建它时,你会给它分配一个字符串:“韦弦zhy”。如果您要将代码重写为该代码,它将停止工作:

代码语言:javascript
复制
var name
name = "韦弦zhy"

这一次Xcode将给您一条错误消息:“Type annotation missing in pattern。它的意思是,“我不知道name是什么数据类型,因为你没有给我足够的信息。”

此时,您有两个选项:要么创建变量并在一行代码中为其提供初始值,要么使用类型注释(type annotation),在这里您可以告诉Swift该变量稍后将保持什么数据类型,即使您现在没有为其提供值。

您已经看到过了第一个选项的样子,所以让我们看看第二个:类型注释。我们知道名称将是一个String,所以我们可以通过先写冒号,再写字符串来告诉Swift,如下所示:

代码语言:javascript
复制
var name: String
name = "韦弦zhy"

注意:有些人喜欢在冒号前后加一个空格,使var name : String,但是他们错了,你应该尽量避免在不礼貌的场合提及他们的错误。

这里的教训是,Swift总是想知道每个变量或常量将保存什么类型的数据。总是!你逃不开它,这是一件好事,因为它提供了一种叫做类型安全的东西——如果你说“这会保存一个字符串”,然后试着放一只兔子进去,Swift会拒绝的。

我们现在可以通过引入另一种重要的数据类型Int来尝试这一点,Int是integer的缩写,整数是3、30、300或-16777216这样的整数。例如:

代码语言:javascript
复制
var name: String
name = "韦弦"

var age: Int
age = 26

它声明一个变量为字符串,一个为整数。请注意,StringInt开头都有大写字母,而nameage则没有,这是Swift中的标准编码约定。编码约定对Swift来说是无关紧要的(你可以写自己喜欢的名字!)但对其他开发者来说确实很重要。在本例中,数据类型以大写字母开头,而变量和常量则不以大写字母开头。

现在我们有了两种不同类型的变量,您可以看到类型安全性在起作用。试着写这个:

代码语言:javascript
复制
name = 26
age = "韦弦"

在这段代码中,您试图将一个整数放入一个字符串变量,将一个字符串放入一个整数变量——谢天谢地,Xcode将抛出错误。您可能认为这很迂腐,但它实际上非常有用:您承诺一个变量将保存一种特定类型的数据,而Xcode将在您的工作中强制执行这一点。

在继续之前,请删除导致错误的那两行代码,否则您的Playground上的任何东西都无法继续工作!
Float and Double 浮点数和双精度浮点数

让我们再看两种数据类型,称为FloatDouble。这是Swift用小数部分存储数字的方法,例如3.1、3.141、3.1415926和-16777216.5。这有两种数据类型,因为你可以选择你想要多少精度,但大多数情况下这并不重要,所以苹果官方推荐总是使用Double,因为它有最高的精度。

试着把这个放到你的Playground上:

代码语言:javascript
复制
var latitude: Double
latitude = 36.166667

var longitude: Float
longitude = -86.783333

你可以看到两个数字都出现在右边,但仔细看,因为有一个微小的差异。我们说过经度应该等于-86.783333,但在结果窗格中,您将看到-86.78333——它在末尾缺少了一个3。现在,你可能会说,“0.000003有什么关系?”但这很好地证明了我所说的准确性。

因为Playground会随着您键入的内容而更新,所以我们可以尝试一下,这样您就可以确切地看到Float和Double的区别。尝试将代码更改为:

代码语言:javascript
复制
var longitude: Float
longitude = -86.783333
longitude = -186.783333
longitude = -1286.783333
longitude = -12386.783333
longitude = -123486.783333
longitude = -1234586.783333

这是在小数点前增加数字,而在小数点后保持相同数量的数字。但是,如果您在结果窗格中看到,当您在点之前添加更多数字时,Swift将在点之后删除数字。这是因为它存储您的号码的空间有限,所以它首先存储最重要的部分——丢失1000000是一件大事,而丢失0.000003则不那么重要。

Float 精度

现在试着把Float改成Double,每次你都会看到Swift打印出正确的数字:

代码语言:javascript
复制
var longitude: Double

这是因为Double的精度是Float的两倍,所以它不需要削减你的数字。不过,双打还是有限制的——如果你尝试一个像123456789.123456789这样的大数字,你会发现它会被削减到123456789.1234568。

Boolean 布尔型

Swift有一个内置的数据类型,可以存储值是真是假,称为Bool,Boolean的缩写。布尔没有“也许”或“也许”的空间,只有绝对的:是真是假。例如:

代码语言:javascript
复制
var stayOutTooLate: Bool
stayOutTooLate = true

var nothingInBrain: Bool
nothingInBrain = true

var missABeat: Bool
missABeat = false

提示:您会注意到这些变量是以一种非常特殊的方式编写的:我们不编写MissABeatmissabeat或其他此类变体,而是将首字母小写,然后将第二个和后续单词的第一个字母大写。这被称为驼峰命名(camel case),因为它看起来有点像骆驼的驼峰,而且它被用来简化变量名中单词的读取。

聪明地使用类型注释

正如您所了解到的,有两种方法可以告诉Swift变量保存的数据类型:在创建变量时赋值,或使用类型注释。如果你有选择,第一个总是更好的,因为它更清楚。例如:

代码语言:javascript
复制
var name = "Tim McGraw"

这比下面的要好:

代码语言:javascript
复制
var name: String
name = "Tim McGraw"

这适用于所有数据类型。例如:

代码语言:javascript
复制
var age = 25
var longitude = -86.783333
var nothingInBrain = true

这种技术称为类型推断,因为Swift可以通过查看要放入其中的数据类型来推断变量应使用的数据类型。当涉及到像-86.783333这样的数字时,Swift总是会推断出一个Double而不是一个Float

为了完整起见,我应该补充一点,可以指定一个数据类型,同时提供一个值,如下所示:

代码语言:javascript
复制
var name: String = "Tim McGraw"

本文来自Hacking with Swift给swift初学者的入门课程Swift for Complete Beginners Types of Data

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在继续之前,请删除导致错误的那两行代码,否则您的Playground上的任何东西都无法继续工作!
  • Float and Double 浮点数和双精度浮点数
  • Boolean 布尔型
  • 聪明地使用类型注释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档