Swift-基础(常量,变量)

常量、变量

声明变量和常量

常量和变量必须在使用前声明。 您使用let关键字声明常量,使用var关键字声明变量。 下面是一个例子,说明如何使用常量和变量来跟踪用户进行的登录尝试次数:

let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

这段代码可以读作
声明一个常量叫做‘’maximumNumberOfLoginAttempts‘’并且给他赋值为10,声明一个变量叫做‘’currentLoginAttempt‘’,并且给他赋值为0
在此示例中,允许的登录尝试的最大数量被声明为常量,因为最大值从不更改。 当前登录尝试计数器被声明为一个变量,因为该值必须在每次失败的登录尝试之后递增。
您可以在一行上声明多个常量或多个变量,用逗号分隔:

var x = 0.0, y = 0.0, z = 0.0

注意:如果你的代码中的存储值不会改变,总是使用let关键字声明为一个常量。 仅使用变量来存储需要更改的值。

类型注释

您可以在声明常量或变量时提供类型注释,以明确常量或变量可以存储的值的类型。 通过在常量或变量名称后面放置冒号,后跟空格,然后使用要使用的类型的名称来编写类型注释。
下面这个示例为名为welcome Message的变量提供类型注释,以指示变量可以存储字符串值:

var welcomeMessage: String

声明中的冒号表示“... of type ...”,因此上面的代码可以解释为:
“声明一个名为welcome Message的变量,类型为String。"
短语“of type String”表示“可以存储任何字符串值”。它被认为是可以存储的“事物的类型”(或“事物的种类”)。
现在可以将welcomeMessage变量设置为任何字符串值,而不会出错:

welcomeMessage = "Hello"

您可以在单个行上定义多个相同类型的相关变量,用逗号分隔,最后一个变量名后面带有一个类型注释:

var red, green, blue: Double

在实践中很少需要编写类型注释。 如果在定义的点提供常量或变量的初始值,Swift几乎总是可以推断用于该常量或变量的类型,如类型安全和类型推断中所述。 在上面的welcomeMessage示例中,不提供初始值,因此,welcomeMessage变量的类型使用类型注释指定,而不是从初始值推断。

常量和变量的命名

常量和变量名可以包含几乎任何字符,包括Unicode字符:

let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"

常量和变量名称不能包含空格字符,数学符号,箭头,私有使用(或无效)Unicode代码点,或行和框图字符。 他们也不能从一个数字开头,虽然数字可能包括在名称的其他地方。
一旦你声明了某个类型的常量或变量,你不能使用相同的名字重新声明它,或者改变它来存储不同类型的值。 也不能将常数更改为变量或将变量更改为常量。
注意:如果你需要给一个常量或变量与一个保留的Swift关键字相同的名称,当使用它作为名称时,用反引号(`)包围关键字。 但是,避免使用关键字作为名称,除非你没有别的选择。

let `func` = "string"
print(`func`)

注意:与许多其他语言不同,Swift不需要你在代码中的每个语句之后写一个分号(;),如果你愿意,你可以这样做。 但是,如果要在单个行上编写多个单独的语句,则需要使用分号:

let cat = "🐱"; print(cat)

整数

整数是没有小数分量的整数,例如42和-23。 整数有符号(正,零或负)或无符号(正或零)。
Swift提供了8,16,32和64位形式的有符号和无符号整数。 这些整数遵循类似于C的命名约定,其中8位无符号整数的类型为UInt8,而32位有符号整数的类型为Int32。 像Swift中的所有类型一样,这些整数类型具有大写的名称。

整数边界

您可以使用其最小和最大属性访问每个整数类型的最小值和最大值:

let minValue = UInt8.min // minValue is equal to 0, and is of type UInt8
let maxValue = UInt8.max // maxValue is equal to 255, and is of type UInt8

这些属性的值是适当大小的数字类型(例如上例中的UInt8),因此可以在表达式中与其他相同类型的值一起使用。

Int

在大多数情况下,您不需要选择要在代码中使用的特定大小的整数。 Swift提供了一个额外的整数类型Int,它与当前平台的本地词大小相同:

  • 在32位平台上,Int与Int32的大小相同。
  • 在64位平台上,Int与Int64的大小相同。

除非需要使用特定大小的整数,否则在代码中始终使用Int作为整数值。 这有助于代码一致性和互操作性。 即使在32位平台上,Int也可以存储-2,147,483,648和2,147,483,647之间的任何值,并且对于许多整数范围都足够大。

UInt

Swift还提供了一个无符号整数类型UInt,它与当前平台本地词大小相同:

  • 在32位平台上,UInt的大小与UInt32相同。
  • 在64位平台上,UInt的大小与UInt64相同。

只有在你需要与平台的本地词大小相同的无符号整数类型时才使用UInt。 如果不是这种情况,则优选Int,即使已知要存储的值是非负的。 对Int整数值的一致使用有助于代码互操作性,避免了在不同数字类型之间转换的需要,并且匹配整数类型推断。

浮点数字

浮点数是具有小数分量的数字,例如3.14159,0.1和-273.15。
浮点类型可以表示比整数类型更宽的范围的值,并且可以存储比可以存储在Int中更大或更小的数字。 Swift提供了两种带符号的浮点数类型:

  • Double表示64位浮点数。
  • Float表示一个32位浮点数。

注意:Double具有至少15个十进制数字的精度,而Float的精度可以少至6个十进制数字。 要使用的适当的浮点类型取决于您需要在代码中使用的值的性质和范围。 在任一类型都适当的情况下,优选Double。

类型安全和类型推理

例如,如果将一个文本值42赋值给一个新常量,而不说它是什么类型,Swift推断出你希望该常量是一个Int,因为你已经用一个看起来像整数的数字初始化它:

let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int

同样,如果您没有为浮点文本指定类型,Swift推断出您想要创建一个Double:

let pi = 3.14159
// pi is inferred to be of type Double

Swift在推断浮点数类型时总是选择Double(而不是Float)。
如果在表达式中组合整数和浮点文本,则会从上下文中推断Double类型:

let anotherPi = 3 + 0.14159
// anotherPi is also inferred to be of type Double
3的文字值本身没有显式类型,因此从浮点文字的存在推断出适当的输出类型Double作为加法的一部分。

数字字面量

整数文字可以写成:

  • 十进制数,无前缀
  • 一个二进制数,带有一个0b前缀
  • 一个八进制数,带有一个0o前缀
  • 十六进制数,带有0x前缀所有这些整数字面值的十进制值为17:
let decimalInteger = 17

let binaryInteger = 0b10001 // 17 in binary notation

let octalInteger = 0o21 // 17 in octal notation

let hexadecimalInteger = 0x11 // 17 in hexadecimal notation

浮点文字可以是十进制(无前缀)或十六进制(具有0x前缀)。 它们必须在小数点的两边始终具有数字(或十六进制数字)。 小数浮点也可以有一个可选的指数,由大写或小写e表示; 十六进制浮点数必须具有指数,由大写或小写p表示。
对于指数为exp的十进制数,基数乘以10 exp:

  • 1.25e2是指1.25×102,或125.0。
  • 1.25e-2是指1.25×10 -2,或0.0125。

对于指数为exp的十六进制数,基数乘以2 exp:

  • 0xFp2表示15 x 22或60.0。
  • 0xFp-2表示15 x 2-2或3.75。

所有这些浮点文本的十进制值为12.1875:

let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0

数字文字可以包含额外的格式,以使它们更容易阅读。 整数和浮点都可以用额外的零填充,并且可以包含下划线以帮助可读性。 两种类型的格式都不会影响字面值的基础值:

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容