1.基本介绍
1.常量和变量
- 常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。常量的值一旦设定就不能改变,而变量的值可以随意更改。
- Swift 不强制要求在每条语句的结尾处使用分号(;),当然,也可以按照自己的习惯添加分号。有一种情况下必须要用分号,即在同一行内写多条独立的语句。
//声明常量 let maximumNumberOfLoginAttempts = 10; //声明变量 var currentLoginAttempt = 0; //maximumNumberOfLoginAttempts = 11; //错误:常量赋初值后不能修改 currentLoginAttempt = 11; //正确
2.类型标注
- 当声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称(空格不是必须的)。声明中的冒号代表着“是...类型”.
- 一般来说很少需要写类型标注。如果在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型。
- 如果没有给常量/变量初始值,那么需要写类型标注。
let welcomeMessage: String; //加了类型标注 welcomeMessage = "Hello"; let hello = "Hello"; //可以不加类型标注
3.输出常量和变量
- Swift 用字符串插值的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义。
var friendlyWelcome: String = "Hello"; print("The current value of friendlyWelcome is \(friendlyWelcome)");
4.注释
- 单行注释://
- 多行注释:/**/
- 代码分段(类似于OC中的 #pragma mark - ):// MARK: - (会有一个分割线)和 //TODO:
5.类型别名
- 类型别名就是给现有类型定义另一个名字。可以使用typealias关键字来定义类型别名。
typealias AudioSample = UInt16;
var maxAmplitudeFound = AudioSample.min;
【说明】:类型别名在实际项目开发中比较常用,例如定义闭包类型等。
6.整数和浮点数
- Swift 提供了8,16,32和64位的有符号和无符号整数类型。这些整数类型和 C 语言的命名方式很像,比如8位无符号整数类型是UInt8,32位有符号整数类型是Int32。
- Swift 提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同:在32位平台上,Int和Int32长度相同;在64位平台上,Int和Int64长度相同。
- Swift 也提供了一个特殊的无符号类型UInt,长度与当前平台的原生字长相同:在32位平台上,UInt和UInt32长度相同。在64位平台上,UInt和UInt64长度相同。
- Double表示64位浮点数。当需要存储很大或者很高精度的浮点数时请使用此类型。
- Float表示32位浮点数。精度要求不高的话可以使用此类型。
7.数值型类型转换
- 类型转换使用SomeType(ofInitialValue)格式。
let twoThousand: UInt16 = 2000; let one: UInt8 = 1; let twoThousandAndOne = twoThousand + UInt16(one);
8.布尔值
- Swift 有两个布尔常量,true和false
9.元组
- 元组把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
let http404Error = (404, "Not Found"); http404Error.0; //404 let (statusCode, statusMessage) = (404, "Not Found"); statusCode; //404 let http200Status = (statusCode: 200, description: "OK"); http200Status.statusCode; //200 http200Status.0; //200
10.可选类型
- 可选类型用来处理值可能缺失的情况。可选类型表示:有值(等于 x)或者没有值.
let possibleNumber = "11"; //因为该构造器可能会失败,所以它返回一个可选类型(optional)Int,而不是一个Int。一个可选的Int被写作Int?而不是Int。问号暗示包含的值是可选类型,也就是说可能包含Int值也可能不包含值。 let convertedNumber = Int(possibleNumber);
11.可选绑定
- 使用可选绑定来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。
let possibleNumber = "11"; if let actualNumber = Int(possibleNumber) { print("\'\(possibleNumber)\' has an integer value of \(actualNumber)"); } else { print("\'\(possibleNumber)\' could not be converted to an integer"); }
【说明】:可选绑定功能在实际项目中经常应用,如结合泛型的应用,示例如下:
//imageName是泛型 if let image = imageName as? String { imageView.image = gof_ImageWithName(image); } else if let image = imageName as? UIImage { imageView.image = image; }
12.隐式解析可选类型
- 可选类型暗示了常量或者变量可以“没有值”。有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
- 这种类型的可选状态被定义为隐式解析可选类型。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。
var assumedString: String! = nil; assumedString = "An implicitly unwrapped optional string."; let implicitString: String = assumedString;
13.nil
- Swift 的
nil
和 Objective-C 中的nil
并不一样。在 Objective-C 中,nil
是一个指向不存在对象的指针。在 Swift 中,nil
不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil
,不只是对象类型。
无善无恶心之体,
有善有恶意之动,
知善知恶是良知,
为善去恶是格物。