在我的 Swift 代码中,我有几个看起来像这样的方法:
protocol EditorDelegate {
// ...
func didStartSearch(query: String) -> Bool
}
class Editor: UIViewController {
func search(sender: AnyObject) {
let wasHandled = self.delegate?.didStartSearch(query) ?? false
if !wasHandled {
// do default searching behavior
}
}
}
这有效,但它不是 self 记录的。 didStartSearch
方法并没有真正表明它正在返回一个标志,指示是否应跳过默认行为。
处理这个问题有哪些好的选择?
最佳答案
我试图想出一种更好的方法来命名委托(delegate)函数,下面是我想出的对我来说最有意义的方法。枚举在 swift 中非常强大,使用它们可以让代码一目了然。此外,我喜欢根据不同的状态来思考事物,这些状态可以用枚举明确定义。
enum SearchStatus {
case Ready
case Processing
case Complete(result: String)
}
protocol EditorDelegate: class {
func statusForSearch(with query: String) -> SearchStatus
}
class Editor: UIViewController {
weak var delegate: EditorDelegate?
func search(sender: AnyObject) {
let query = "some input.."
guard let status = delegate?.statusForSearch(with: query) else {
// delegate not set
return
}
switch status {
case .Ready:
// actually do your search
break
case .Processing:
// search in progress
break
case .Complete(let result):
// do something with result
print("result = \(result)")
break
}
}
}
关于swift - 我应该如何命名返回 "continue"标志的委托(delegate)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207843/