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表示没有值