接口和类方法中的Self

2019-06-28  本文已影响0人  盖小聂
protocol Copyable {
    //Self不仅指代实现该接口的类型本身,也包括了这个类型的子类。
    func copy() -> Self
}

class MyClass: Copyable {
    var num = 1
    func copy() -> Self {
        let result = type(of: self).init()
        result.num = num
        return result
    }
    
    required init() {
        //如果需要构建一个Self类型的对象的话,需要有required关键字修饰的初始化方法,这是因为Swift必须保证当前类和其子类都能响应这个init方法。
    }
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let object = MyClass()
        object.num = 100
        
        let newObject = object.copy()
        newObject.num = 1
        
        print(object.num) //100
        print(newObject.num) //1
    }
}

上一篇 下一篇

猜你喜欢

热点阅读