正文
/* 扩展 1: 扩展为现有的类、结构体、枚举类型、或协议添加了新功能。 这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)。扩展和 Objective-C 中的 分类 类似 2: Swift 中的扩展可以: 2.1: 添加计算实例属性和计算类型属性; 2.2: 定义实例方法和类型方法; 2.3: 提供新初始化器; 2.4: 定义下标; 2.5: 定义和使用新内嵌类型; 2.6: 使现有的类型遵循某协议 */ import UIKit class Expand21VC: UIViewController { var name: String var age: Int? override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { self.name = "" super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) } required init?(coder: NSCoder) { self.name = "" super.init(coder: coder) } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white self.title = "21:扩展" // 1: 添加计算实例属性和计算类型属性; let oneInch = 25.4.mm print("One inch is \(oneInch) meters") testExpandFunc() } } /* 1: 添加计算实例属性和计算类型属性; 扩展可以添加新的计算属性,但是不能添加存储属性,也不能向已有的属性添加属性观察者。 */ extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 } } /* 2:扩展实例化方法 扩展能为类添加新的便捷初始化器,但是不能为类添加指定初始化器或反初始化器。 指定初始化器和反初始化器 必须由原来类的实现提供。 */ extension Expand21VC { convenience init(name: String, age:Int) { self.init(nibName: nil, bundle: nil) self.name = name self.age = age } } /* 3: 扩展可以为已有的类型添加新的实例方法和类型方法。 */ extension Expand21VC { public func testExpandFunc() { print("扩展实例方法") } }
标签:21,self,扩展,init,添加,var,swift,属性 From: https://www.cnblogs.com/zyzmlc/p/17202627.html