美文网首页
45.Swift遵循协议返回Self

45.Swift遵循协议返回Self

作者: noonez | 来源:发表于2017-05-24 19:52 被阅读202次

    1.假如有协议

    import UIKit
    
    //使用SwiftKVCModel的Model类必须遵循的协议
    protocol SwiftKVCModelProtocol:NSObjectProtocol {
        /// 必须在没有参数的情况下,这个model能被创建
        ///
        /// - Returns:
        static func createModel()->Self
       
        func clone() -> Self
        /**
         注册model中所需要使用的其它model类的类型,model必须遵循本协议
         
         @return model类列表
         */
        func registerClassList()->[SwiftKVCModelProtocol]
        
        /**
         注册数组属性所需要的的类型,当model中有属性是数组类型时,指定数组的model类型,model必须遵循本协议
         
         @return 属性名和它对应的类型列表
         */
        func arrayProperTypeList()->[String:SwiftKVCModelProtocol]
    }
    

    2.类AModel遵循协议

    import UIKit
    
    class AModel: NSObject, SwiftKVCModelProtocol {
        var name = ""
        var sex = false
        var age = 0
        
        required override init() {
            super.init()
        }
        
        static func createModel() -> Self {
            return self.init()
        }
       func clone() -> Self {
            return type(of: self).init()
        }
        func registerClassList() -> [SwiftKVCModelProtocol] {
            return []
        }
        func arrayProperTypeList() -> [String : SwiftKVCModelProtocol] {
            return [:]
        }
        
        override var description: String{
            return "name=\(name), sex=\(sex), age=\(age)"
        }
    }
    

    要想能够正常返回Self,首先遵循协议的类必须实现

    required override init() {
            super.init()
    }
    

    返回必须用self.init()返回

    static func createModel() -> Self {
            return self.init()
    }
    

    继承AModel类BModel,BModel依然能调用协议中的方法,并正确返回BModel的内容

    import UIKit
    
    class BModel: AModel {
        var birth = ""
        var address = ""
        override var description: String{
            return super.description + ",birth=\(birth), address=\(address)"
        }
        
        override func registerClassList() -> [SwiftKVCModelProtocol] {
            return []
        }
    }
    

    相关文章

      网友评论

          本文标题:45.Swift遵循协议返回Self

          本文链接:https://www.haomeiwen.com/subject/fqioxxtx.html