21:swift-扩展

 

 

正文

/* 扩展
 
 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("扩展实例方法")
    }
}

 

posted on 2023-03-10 10:49  风zk  阅读(9)  评论(0编辑  收藏  举报

导航