【发布时间】:2017-11-08 02:09:42
【问题描述】:
我需要一些关于在 Swift 中通知委托的最佳实践的帮助,我有一个 ScoreStats 模型,它有一个 Student 列表,每个 Student 都有一个分数,并且该模型提供了所有 @ 的平均分数987654324@指的是:
class ScoreStats {
private(set) var averageScore: Double = 0
var student: [Student]? {
if let students = students {
// calculate `averageScore`
}
// notify delegate
self.delegate.averageScoreUpdated()
}
}
我的问题是,来自 Objective C,人们通常有这样的方法:
- (void)updateStudents:(NSArray<Student *> *)students {
self.students = students;
// calculate `averageScore`
[self.delegate averageScoreUpdated];
}
从特定语言的角度来看,我可以使用didSet 达到相同的目的,但在其他方面有什么问题吗?例如,在 Swift 中公开 students 属性意味着不同的地方都可以修改它并且代理会收到通知,而且编码人员不清楚设置students 属性会触发averageScore 的代理通知,而有ObjC 中的专用方法使其更加清晰。
意见?
【问题讨论】:
标签: objective-c swift delegates