目录:
- 分号
- 常量和变量
- 数据类型
- 数值型类型转换
- 类型别名
- 元组
- 可选类型
- API版本检查
分号
Swift并不强制要求你在每条语句的结尾处使用分号( ; ),你也可以按照自己的习惯添加分号。如果在一行内写多条独立的语句情况下必须要用分号。
常量和变量
使用let定义常量,使用var定义变量,常量和变量必须在使用前声明,且可以使用Unicode字符声明:不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。
let maximumNumberOfLoginAttempts = 10 var currentLoginAttempt = 0
let constWelcomeMessage: String // 类型标注
var varWelcomeMessage: String // 类型标注
let 你好 = "你好世界" // Unicode字符声明常量
let ?? = "dogcow" // Unicode字符声明常量
你可以在一行中声明多个常量或者多个变量,用逗号隔开:
var x = 0.0, y = 0.0, z = 0.0
var red, green, blue: Double // 类型标注
数据类型
Swift包含基础数据类型:
1 Int, Int8, Int16, Int32, Int64, UInt, UInt8, UInt16, UInt32, UInt64 : 整型值 2 Float : 表示32位浮点数 3 Double : 表示64位浮点数, 当执行类型推断而推断浮点数的类型时,Swift总是会选择Double而不是Float 4 Bool : 布尔型值 5 String : 文本型值
6 Character : 字符型值
Swift提供集合数据类型:
1 Array : 数组类型 2 Set : 集合类型 3 Dictionary : 字典类型
Swift中所有的基本类型:整数、浮点数、布尔值、字符串、数组和字典,都是值类型,并且在底层都是以结构体的形式所实现。
数值型类型转换
Int8和Int16是不同的两种类型,在转换时必须使用类型强制转换
// 整数类型转换 let twoThousand: UInt16 = 2000 let one: UInt8 = 1 let twoThousandAndOne = twoThousand + UInt16(one) // 整数和浮点数间转换 let three = 3 let pointOneFourOneFiveNine = 0.14159 let pi = Double(three) + pointOneFourOneFiveNine // 加号两边的数类型须相同
类型别名
可以使用 typealias 关键字来定义类型别名
typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound = 0
元组
把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型
let http404Error = (404, "Not Found") // http404Error 的类型是 (Int, String) let http200Status = (statusCode: 200, description: "OK") // 定义元组元素 let (statusCode, statusMessage) = http404Error // 分解元组获取元素值 let (justTheStatusCode, _) = http404Error // 忽略缺省值
可选类型
可以使用?定义可选类型变量或常量
var surveyAnswer: String? // surveyAnswer 被自动设置为 nil var serverResponseCode: Int? = 404 let possibleString: String? = "An optional string." let forcedString: String = possibleString! // 需要感叹号来获取值
如果一个可选类型变量或常量第一次被赋值之后,能够确定总会有值时,可以使用!定义隐式解析可选类型的变量或常量
let assumedString: String! = "An implicitly unwrapped optional string." let implicitString: String = assumedString // 不需要感叹号
API版本检查
if #available(iOS 10, macOS 10.12, *) { // 在 iOS 使用 iOS 10 的 API, 在 macOS 使用 macOS 10.12 的 API } else { // 使用先前版本的 iOS 和 macOS 的 API }