闭包
与OC的block类似,主要用于异步操作执行完毕后的代码回调,网络访问结果以参数的形式传递给调用方。
闭包表达式语法:
闭包表达式语法有如下一般形式
{ (parameters) -> returnType in
statements
}
闭包的几种写法:
- 无参无返回值
let closure = {
print("hello with closure")
}
- 有参有返回值
let closure = { (a: Int, b: Int) -> Int in
return a + b
}
闭包的几种使用场景:
- 作为参数
func hasAnyMatch(list: [Int], condition:(Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
// 或
//let lessThanTen = { (number: Int) -> Bool in
// return number > 10
//}
hasAnyMatch(list: [17, 20, 18, 19], condition: lessThanTen)
- 作为返回值
func closureAsReturnTypeFunc(a: Int, b: Int) -> (Int) -> String {
let result = a + b
return { (c) in
return String(result + c)
}
}
closureAsReturnTypeFunc(a: 10, b: 11)(4)
构造函数
注意:类在创建实例时,必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值。
class Shape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
子类构造:
- 设置子类声明的属性值
- 调用父类的构造器
- 改变父类定义的属性值。其他的工作比如调用方法、getters 和 setters 也可以在这个阶段完成。
class Square: Shape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)."
}
}
网友评论