美文网首页
Swift的责任链模式

Swift的责任链模式

作者: 蜜蜂6520 | 来源:发表于2017-05-06 21:52 被阅读68次

责任链模式:当多个对象可以响应一个请求,可以将这些对象组成链,请求在这个链上传递,直到链上的某一个对象处理此请求或者到达链的尾部忽略处理。
iOS中的用户界面事件传递就是使用的责任链模式。UI组件都继承自UIResponder类,当用户与界面交互,事件首先传递给责任链中对应的链即交互区域直接所属的UI组件,该组件可以响应处理,也可以继续传递,直到责任链的尾部即窗口忽略处理。

责任链模式

根据cell的属性值决定背景色

import UIKit

class ProductTableCell: UITableViewCell {
    var category:String = ""
}

class CellFormatter {
    var nextLink:CellFormatter?
    
    func formatCell(cell: ProductTableCell) {
        nextLink?.formatCell(cell: cell)
    }
    
    class func createChain() -> CellFormatter {
        let formatter = ChessFormatter()
        formatter.nextLink = WatersportsFormatter()
        formatter.nextLink?.nextLink = DefaultFormatter()
        return formatter
    }
}

class ChessFormatter : CellFormatter {
    override func formatCell(cell: ProductTableCell) {
        if (cell.category == "Chess") {
            cell.backgroundColor = .lightGray
        } else {
            super.formatCell(cell: cell)
        }
    }
}

class WatersportsFormatter : CellFormatter {
    override func formatCell(cell: ProductTableCell) {
        if (cell.category == "Watersports") {
            cell.backgroundColor = .green
        } else {
            super.formatCell(cell: cell)
        }
    }
}

class DefaultFormatter : CellFormatter {
    override func formatCell(cell: ProductTableCell) {
        cell.backgroundColor = .yellow
    }
}

使用

// table的cellForRow中
CellFormatter.createChain().formatCell(cell: cell)

如果觉得我的文章对您有用,请点击喜欢。您的支持将鼓励我继续创作!

大家有什么不懂或我哪里写错了都可以评论留言,我一定会回复的~

相关文章

网友评论

      本文标题:Swift的责任链模式

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