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 []
}
}
网友评论