许多CocoaPod和本机iOS库都使用协议,它们的名称可以是CustomClassDelegate
或CustomClassDataSource
作为执行某些设置或自定义的手段。我想知道什么时候应该使用这个编程模型,因为看起来我可以通过属性完成大部分工作。iOS:何时使用委托/数据源(协议)与属性
例
如果我定义一个名为SmurfViewController
的自定义类具有SmurfLabel
,是更好的做法是在smurfLabel
存储为私有财产,有一个公共计算财产称为smurf
看起来像这样:
private var smurfLabel = UILabel()
public var smurf: String {
get {
return smurfLabel.text
}
set(text) {
smurfLabel.text = text
}
}
,或者我应该定义一个SmurfDataSource
具有公共职能,看起来像这样:
func textForSmurfLabel() -> String {
return "smurfText"
}
什么时候该用什么?
您无法使用相同的属性。据我所知,协议是用户用来在某个动作完成时通知其他类的自定义委托方法。 –
您可以使用回调代替代表。事实上,它是受到鼓励的。不错的教程:https://medium.cobeisfresh.com/why-you-shouldn-t-use-delegates-in-swift-7ef808a7f16b#.erlmejwjo – Siriss
隐含在评论/答案在这里,委托协议模式是一种方式一个班级通知另一个事件。通常,在考虑委托时,您将委托协议模式与其他通知模式(例如回调闭包,通知,观察员等)进行比较。属性本身完全不同,旨在允许外部对象查询一些对象,但不是主动通知某些状态变化。 – Rob