我们以斗鱼APP为例,总结swift3.0以及swift4.0转换过程中遇到的问题。
我们RecommendVC类继承自BaseAnchorVC,BaseAnchorVC中包含setupUI方法,我们重写setupUI方法,然后再子类RecommendVC中重写setupUI方法。
extension RecommendVC { override func setupUI(){ //调用父类方法 super.setupUI() collectionView.addSubview(cycleView) collectionView.addSubview(gameView) //拓宽collectionView的高度 collectionView.contentInset = UIEdgeInsets(top: kCycleViewH+kGameViewH, left: 0, bottom: 0, right: 0) } }在swift4.0方法中不可使已使用这种方法重写,否则会报错。如下图所示: 由于无法重写方法,所以我们目前就不重写父类方法,而是重新给子类定义一个方法使用。
我们必须在属性前添加@objc,只有这样才能满足OC的KVC赋值。
class CycleModel: NSObject { @objc var title : String = "" @objc var pic_url : String = "" @objc var anchor : AnchorModel? @objc var room :[String :Any]?{ didSet{ guard let room = room else { return } anchor = AnchorModel(dict: room) } } init(dict : [String : Any]) { super.init() setValuesForKeys(dict) } override func setValue(_ value: Any?, forUndefinedKey key: String) { } }