【swift基础】08在swift如何使用闭包、懒加载、和自定义类

来源:互联网 发布:通信软件slack 编辑:程序博客网 时间:2024/06/05 03:04

闭包

  • 闭包定义
  • 闭包简化 - 尾随闭包
  • 闭包参数
  • 闭包返回值
  • 闭包的循环引用
weak var weakSelf = selfdemo("zhangsan") { (_) -> Int in    print(weakSelf?.view.backgroundColor)    return 20}

懒加载

lazy var demoView: UIView = {    let v = UIView(frame: CGRectMake(10, 10, 100, 100))    v.backgroundColor = UIColor.redColor()    return v}()
  • 格式:
lazy var 变量: 类型 = { 创建变量代码 }()
  • 懒加载的写法本质上是定义并执行一个闭包

getter & setter

自定义 Person 类

class Person: NSObject {    var name: String?    var age: Int?}

getter & setter

var _name: String?var name: String? {    get {        return _name    }    set {        _name = newValue    }}
  • Swift 中以上形式的 getter & setter 很少用

didSet

  • 在 OC 中,我们通常希望在给某一个变量赋值之后,去做一些额外的操作
  • 最经典的应用就是在自定义 Cell 的时候,通过模型的设置方法完成 Cell 的填充
var length: Int? {    didSet {        timeStr = String(format: "%02d:%02d:%02d", arguments: [length! / 3600, (length! % 3600) / 60, length! % 60])    }}var timeStr: String?

计算型属性

var title: String {    get {        return "Mr " + (name ?? "")    }}
  • 只实现 getter 方法的属性被称为计算型属性,等同于 OC 中的 ReadOnly 属性
  • 计算型属性本身不占用内存空间
  • 不可以给计算型属性设置数值
  • 计算型属性可以使用以下代码简写
var title: String {    return "Mr " + (name ?? "")}

构造函数

init(dict: [NSObject: AnyObject]) {    name = dict["name"] as? String    age = dict["age"] as? Int}

析构函数

deinit {    print("88")}
0 0
原创粉丝点击