基础
概览
Swift是用来开发 iOS,macOS,watchOS,和 tvOS 应用的语言.
在很多方面与C语言、Objective-C的体验非常类似.
Swift提供了自己的基本类型,包括Int 、Double、Float、Bool、String
集合类型包括:Array、Set、Dictionary
Objective-C没有的高级类型:元组(Tuple)、可选型(Optional)
注:Swift是类型安全的语言。如果代码中需要一个String类型,类型安全可言防止你错误的传入一个Int。类型安全可以帮你尽早的捕捉并修复错误。
常量变量
- let: 用来声明常量
- var:用来声明变量
- 常量或者变量声明的时候,可以使用类型注解标明其类型,也可以依靠编译器的类型推断确定其类型
- 常量名和变量名不能包含空白字符、数学符号、箭头、私有使用(或无效)的 Unicode 代码、点、线和盒绘图字符等
注:如果你需要用 Swift 预留关键字来命名常量或变量时,用反时针(``)包围关键字。但是请注意避免使用关键字作为名称,除非你必须这么做。
var myVariable = 42
myVariable = 50
let myConstant = 42
var message: String
let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"
let `class` = "三年二班"
打印
print(friendlyWelcome)
print("The current value of friendlyWelcome is \(friendlyWelcome)")
注释
// 这是一个注释.
/* 这也是一个注释
但是是多行的. */
分号
- 语句结束不需要用分号来结尾
- 当你试图在同一行内编写多条独立语句的时候,任意两条语句之间是必须用分号分隔开的:
let cat = "🐱"; print(cat)
// 打印 "🐱"
类型转换
整型与浮点型数字之间的类型转换必须是显式的
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 等于 3.14159, 然后会被 Swift 推导为 Double 类型
别名
typealias Book = UInt16
typealias completeClosure = (Int, Bool)-> Int
//将复杂的闭包用别名代替
元组
- 元组 将多个值组合在一起成为一个复合值。元组里面的值可以是任何类型,不需要是相同的类型
let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String), 等于 (404, "Not Found")
- 你可以将一个元组的内容 分解 为单独的常量或变量,然后你就可以正常使用它们了
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// 打印 "The status code is 404"
print("The status message is \(statusMessage)")
// 打印 "The status message is Not Found"
- 如果你只需要元组里的一部分值的话,分解元组的时候使用一个下划线(_) 来忽略元组里面的值
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// 打印 "The status code is 404"
- 此外,使用从零开始的下标来访问元组里单个元素的值
print("The status code is \(http404Error.0)")
// 打印 "The status code is 404"
print("The status message is \(http404Error.1)")
// 打印 "The status message is Not Found"
- 定义元组时,你可以为元组中的单个元素命名
- 如果你在元组里为元素命名了,那么你就可以通过元素名称去获取元素的值
let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode)")
// 打印 "The status code is 200"
print("The status message is \(http200Status.description)")
// 打印 "The status message is OK"
可选类型(optional)
- Swift的可选型用来处理值可能缺省的情况
- 一个可选类型代表了两种可能:要么有值,然后你就可以通过解包 ! 来获取值;要么没有值 (nil)
- 可选型表示为普通类型后接 ? 的形式。例如 Int?
这里有一个关于可选类型如何应对值缺省情况的例子。Swift 的 Int 类型有一个尝试将 String 类型值转换为 Int 类型值的初始化构造器。然而,并不是每个字符串都可以被转换成整型。字符串 "123" 可以被转换成数字 123,但是字符串 "hello, world" 并不能转换成数字。
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推导为 "Int?" 类型 或者 "optional Int"
另一种情况,服务端返回的json数据,某一个字段可以是空的,我们用model去接的时候经常会用到可选型的情况。例如我们可以这样定义我们的model
struct FYOrderModel {
var orderSn: Int?
var fromCity: String?
var toCity: String?
}
可选型的使用
1、使用if判断可选型是否为nil然后结合强制解包的方式
if nil != convertedNumber {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
// 打印 "convertedNumber 包含整型值 123."
2、使用可选绑定的方式。
使用可选绑定 optional binding 来判断一个可选类型是否包含值,如果包含就赋给一个临时的常量或者变量使这个值可用。可选绑定可以被用到 if 和 while 语句中,用来检查一个值是否是可选类型, 并且将值提取为一个常量或者变量
if let number = convertedNumber {
print("\"\(convertedNumber)\" has an integer value of \(number)")
} else {
print("\"\(convertedNumber)\" could not be converted to an integer")
}
3、强解包的方式(慎用)
有时在一些程序结构中可选项一旦被设定初始值时,就会一直拥有值。在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行展开,因为他可以很安全的确认每次访问的时候都有值。
使用强制解包的时候,表示程序员对该可选型有值负责,因为一旦值为nil,那就表示程序会crash
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! //要求使用感叹号
网友评论