Swift - 变量、常量、可选项、字面量

Swift变量

变量是一种使用方便的占位符,用于引用计算机内存地址。
Swift每个变量都指定了特定的类型,该类型决定了变量占用内存的大小,不同的数据类型也可以决定可以存储值的范围。
上一篇文章:“Swift 基本语法和数据类型”已经为大家介绍了基本的数据类型,包括:整形Int、浮点数Double和Float、布尔类型Bool以及字符串类型String等。此外Swift还提供了其他更强大数据类型,Optional、Array、Dictionary、Struct和Class等。

声明变量

声明变量意思是告诉编译器在内存中的那个位置上为变量创建多大的存储空间。在使用变量前,你需要使用var关键字声明。

var name = <initial value>

以下是一个Swift程序中变量声明的简单实例

var varA = 42
print(varA)

var varB : Float
varB = 3.14
print(varB)

以上程序的执行结果为: 42,3.14

变量命名

变量名可以由字母、数字和下划线组成。
变量名需要字母或下划线开始。Swift是一个区分大小写的语言,所以字母的大写与小写是不一样的。变量名也可以使用简单的Unicode字符,如下所示:

var name = "Hello Swift!"
print(name)
var 你好 = “你好啊”
print(你好)

以上程序的执行结果为:Hello Swift,你好啊

变量输出

变量和常量可以使用print函数来输出。在字符串可以使用括号与反斜线来插入变量,如下实例:

var name = "Apple"
var site = "http://www.apple.com"
print("\(name)的官网网址为:\(site)")
//以上程序的执行结果为:Apple的官网网址为:http://www.apple.com

Swift常量

常量一旦设定,在程序运行时就无法改变其值。常量可以是任何的数据类型如:整形常量,浮点型常量,字符量或字符串常量。同样也有枚举类型的常量。常量类似于变量,区别在于常量的值一旦设定就不能改变,而变量的值可以随意更改。

常量的声明

常量使用关键字let类声明,语法如下:

let constValue = <initial value>

以下是一个简单的Swift程序中使用的常量的实例:

let constA = 42
print(constA)

以上程序的执行结果:42

类型标注

当你声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。

var constA : <data type> = <optional intial value>

以下是一个简答的实力演示Swift中常量使用类型标注,主要注意的是常量定义时必须初始值。

let constA = 42
print(constA)

let constB : Float = 3.14
print(constB)

以上程序的执行结果为:42, 3.14

常量命名

常量的命名可以由字母,数字和下划线组成。常量需要以字母或下划线开始。Swift是一个区分大小写的语言,所以字母大写与小写是不一样的。常量名可以使用简单的Unicode字符,如下实例:

let constA = "Hello World"
print(constA)
let 你好 = “你好啊”
print(你好)

以上程序的执行结果为:Hello World,你好啊

常量输出

变量和常量可以使用print函数类输出。在字符串可以使用括号与反斜线来插入常量,如下实例:

let name = "Apple"
let site = "http://www.apple.com"
print("(name)的官网网址为:(site)")

以上程序的执行结果为:“Apple的官方网址为:http://www.apple.com

Swift可选(Optional)类型

Swift的可选(Optional)类型,用于处理值缺失的情况。可选表示“有一个值”或者“没有值”。作为命名类型Optional的简写,换而言之,一下两种声明是相等的。

var optionalInteger : Int?
var optionalInteger: Optional<Int>

在这两种情况下,变量optionalInteger都是可选整数类型。注意:在类型和?之间没有空格。

Optional是一个含有两种情况的枚举,None和Some(T),用来表示可能有或者没有值。任何类型都可以明确声明为(或者隐式转换)可选类型。当声明一个可选类型的时候,要确保用括号给 ? 操作符一个合适的范围。例如,声明可选整数数组,应该写成 (Int[])? 写成 Int[]? 会报错。
当你声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为 nil。
可选项遵照 LogicValue 协议,因此可以出现在布尔环境中。在这种情况下,如果可选类型T?包含类型为T的任何值(也就是说它的值是 Optional.Some(T) ),这个可选类型等于 true,反之为 false。
如果一个可选类型的实例包含一个值,你可以用后缀操作符 !来访问这个值,如下所示:

optionalInteger = 42
optionalInteger! //42

使用操作符!去获取值为nil的可选变量会有运行时错误。
你可以用可选链接和可选绑定选择性执行可选表达式上的操作。如果值为nil,任何操作都不会执行,也不会有运行报错。
让我们来详细看下以下实例来了解 Swift 中可选类型的应用:

var myString : String? = nil
if myString != nil {
    print(myString)
}  else {
    print("字符串为nil")
}

以上程序的执行结果为:字符串为nil。

可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。

强制解析

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示“我知道这个歌可选有值,请使用它。”这个就是可选值的强制解析

var myString : String?
myString = "Hello Swift!"
if myString != nil 
{
    print(myString)
} else {
    print("myString 值为 nil")
}

以上程序的执行结果为:Optional("Hello Swift!")
强制解析可选值,使用感叹号(!)

 var myString:String?
 myString = "Hello, Swift!"
 if myString != nil {
   // 强制解析
   print( myString! )
 } else {
   print("myString 值为 nil")
 }
以上程序的执行结果为:"Hello Swift!"

注意:
使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。

自动解析

你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。
实例如下:

var myString:String!
myString = "Hello, Swift!"
if myString != nil  {
   print(myString)
} else {
   print("myString 值为 nil")
}

以上程序执行结果为:Hello, Swift!

可选绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
像下面这样在if语句中写一个可选绑定:

if let constantName = someOptional {
    statements
}

可选项绑定的实例:

var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
   print("你的字符串值为 - \(yourString)")
} else {
   print("你的字符串没有值")
}

以上程序执行结果为:你的字符串值为 - Hello, Swift!

字面量

所谓的字面量,其实就是像特定的数字,字符串或者是布尔值这样,能够直接了当地的指出自己的类型并为变量进行赋值的值。比如下面示例:

//整型字面量
let aNum = 3
//字符串字面量
let aString = “Hello”
//布尔值字面量
let aBool = true
整形字面量

整型字面量可以使一个二进制、八进制、十进制、十六进制的常量。二进制前缀为0b,八进制前缀为0o,十六进制前缀为0x,十进制没有前缀:
以下为一些整型字面量的实例:

//17 - 十进制表示
let decimalInteger = 17
//17 - 二进制表示
let binaryInteger = 0b10001
//17 - 八进制表示
let octalInteger = 0o21
//17 - 十六进制表示
let hexadecimalInteger = 0x11
浮点型字面量

浮点型字面量有整数部分,小数点,小数部分及指数部分。
除非特别指定,浮点型字面量的默认推倒类型为Swift标准库类型中的Double,表示64位浮点数。
浮点型字面量默认用十进制表示(无前缀),也可以用十六进制表示(加前缀0x)。

十进制浮点型字面量由十进制数字串后跟小数部分或指数部分(或两者皆有)组成。十进制小数部分由小数点 . 后跟十进制数字串组成。指数部分由大写或小写字母 e 为前缀后跟十进制数字串组成,这串数字表示 e 之前的数量乘以 10 的几次方。例如:1.25e2 表示 1.25 ⨉ 10^2,也就是 125.0;同样,1.25e-2 表示 1.25 ⨉ 10^-2,也就是 0.0125。

十六进制浮点型字面量由前缀 0x 后跟可选的十六进制小数部分以及十六进制指数部分组成。十六进制小数部分由小数点后跟十六进制数字串组成。指数部分由大写或小写字母 p 为前缀后跟十进制数字串组成,这串数字表示 p 之前的数量乘以 2 的几次方。例如:0xFp2 表示 15 ⨉ 2^2,也就是 60;同样,0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75。

负的浮点型字面量由一元运算符减号 - 和浮点型字面量组成,例如 -42.5。

浮点型字面量允许使用下划线" _" 来增强数字的可读性,下划线会被系统忽略,因此不会影响字面量的值。同样地,也可以在数字前加 0,并不会影响字面量的值。
以下为一些浮点型字面量的实例:

//十进制浮点型字面量
let decimalDouble = 12.1875    
//十进制浮点型字面量   
let exponentDouble = 1.21875e1    
//十六进制浮点型字面量
let hexadecimalDouble = 0xC.3p0   
字符串字面量

字符串型字面量由被包在双引号只能怪的一串字符串组成,形式如下:
“hello”
字符串型字面量中不能包含未转义的双引号:“”、为转义的:""、回车符或换行符。

以下为字符串字面量的简单实例:

let stringL = "Hello\Apple\n\n苹果官网:\'http://www.apple.com\'"
print(stringL)  

以上程序执行结果为:
Hello Apple
苹果官网:‘http://www.apple.com

布尔型字面量

布尔型字面量的默认类型是Bool。布尔值字面量有三个值,它们是Swift的保留关键字:
1.true表示真
2.false表示假
3.nil表示没有值

下一篇:“Swift运算符” http://www.jianshu.com/p/6d7e6b88034d

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

推荐阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,275评论 1 27
  • Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 C 或...
    XLsn0w阅读 920评论 2 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,776评论 1 10
  • 本文是由iwill公司CEO——马姐亲自写成,如果你正在寻找机会,也正好打开了此文,请认真读下去,或许对你的人生有...
    Doraemon丿果果阅读 898评论 0 0
  • 一直在找寻的,是那些真正属于自己的东西。而这个东西,随着年龄的增长,会越来越多。成长的烦恼也因此所得。在找寻的过程...
    丢了朵朵阅读 298评论 0 1