Swift的责任链模式
2017-05-06 本文已影响68人
蜜蜂6520
责任链模式:当多个对象可以响应一个请求,可以将这些对象组成链,请求在这个链上传递,直到链上的某一个对象处理此请求或者到达链的尾部忽略处理。
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)
如果觉得我的文章对您有用,请点击喜欢。您的支持将鼓励我继续创作!
大家有什么不懂或我哪里写错了都可以评论留言,我一定会回复的~