swift - 我应该如何命名返回 "continue"标志的委托(delegate)方法?

标签 swift delegates

在我的 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/

相关文章:

ios - 我应该在 ViewController 中的什么位置放置初始化代码?

swift - iOS 无法正确检测到 pibeacon 信号

ios - 如何处理类之间完成 block 的结果

swift - UICollectionViewDelegateFlowLayout 方法未在 Swift 2.3 App 中调用

c# - 将枚举元素作为事件参数传递 C#

c# - 委托(delegate)的问题

c# - Xamarin.iOS 和 Swift 的互操作性

swift - 如何在 Swift 中导入 bugsense

json - Alamofire 嵌套 JSON 序列化器

c# - C++/Cli 向托管 Action<T1,T2> 对象添加回调