Swift笔记
let
let常量一旦定义不能改变场景
let image = UIImage(constentsOfFile:”MyImage.png”)
let color = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 1.0)
打印字符串
print("\(nameInferred) on sale for \(priceInferred)!")打印语法\(your expression)
可选类型optional
默认为nil只有可选类型才能赋值为nilnil在swift中是一个确定的值,任何类型的可选类型都可以被设置为nil,不只是对象类型,确定有值在变量后加!来强制解析获取值(一定要确定有一个非nil值,要不会报错)
可选绑定optional binding
判断可选类型是否包含之,如包含赋值给一个临时常量或者变量,可以用在if和while语句中,比如
if let contantName = someOptional {
statements
}
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
}
隐式解析可选类型
关键词:当可选类型第一次被赋值之后确定一直有值,可声明为隐式可选类型,要不每次都要判断和解析可选值是非常低效的,它其实就是一个普通的可选类型,但可以被当做非可选类型来使用,并不需要每次都使用解析来获取值
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! //需要惊叹号来获取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString//不需要感叹号
错误处理
func makeASandwich() throws {
// ...
}
do {
try makeASandwich()
eatASandwich()
} catch Error.OutOfCleanDishes {
washDishes()
} catch Error.MissingIngredients(let ingredients) {
buyGroceries(ingredients)
}
空合运算符a??b
对可选类型a进行空判断,如果a包含值就解析否则返回一个默认值b,是对以下代码的简短表达式
a != nil ? a! : b
区间运算符
闭区间运算符(a...b)
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
半开区间运算符
半开区间(a..<b)
闭包表达式
{ (parameters) -> returnType in
statements
}
闭包的函数体部分由关键字in引入。该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始。
reversed = names.sort({ (s1: String, s2: String) -> Bool in
return s1 > s2
})
尾随闭包:如果您需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性。尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用:
func someFunctionThatTakesAClosure(closure: () -> Void) {
// 函数体部分
}
// 以下是不使用尾随闭包进行函数调用
someFunctionThatTakesAClosure({
// 闭包主体部分
})
// 以下是使用尾随闭包进行函数调用
someFunctionThatTakesAClosure() {
// 闭包主体部分
}
reversed = names.sort() { $0 > $1 }
如果函数只需要闭包表达式一个参数,当您使用尾随闭包时,您甚至可以把()省略掉:
reversed = names.sort { $0 > $1 }
结构体和枚举是值类型
值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。
类是引用类型
与值类型不同,引用类型在被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,引用的
是已存在的实例本身而不是其拷贝。
等价于(===) 和等于(==)
等价于”表示两个类类型(class type)的常量或者变量引用同一个类实例。
“等于”表示两个实例的值“相等”或“相同”
常量结构体的存储属性
如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改该实例的任何属性,即使定义了变量存储属性
计算属性
计算属性不直接存储值,而是提供一个 getter 和一个可选的 setter,来间接获取和设置其他属性或变量的值。
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}