ios - 当调用父类(super class)上的保护 block 时,是否有任何方法可以让子类的覆盖方法返回

标签 ios iphone swift

目前我有一个父类(super class):

class ShareButtonAction : ButtonAction {
    override func execute() {
        guard let isReachable = reachability?.isReachable() where isReachable == true else {                
            print("No network connection")
        return
    }
}

ShareButtonAction 的子类:

class ShareTwitterAction : ShareButtonAction {
    override func execute() {
        super.execute()
        guard let isReachable = reachability?.isReachable() where isReachable == true else {
            return
        }
    }

如果在父类(super class)中捕获到保护条件,我不希望子类的 execute 实现被触发。目前我必须复制困扰我的代码。

如果父类(super class)守卫被抓到,有没有办法告诉子类不要费心执行。

我知道我可以回退到传递 block 而不执行包含 block 的守卫失败,尽管我觉得 swift 中应该有一个内置机制来使这更容易。我希望我还没有找到它。

最佳答案

您可以让该方法返回一个 bool 值,并使用它来决定是否要执行子类中的代码。

class ShareButtonAction : ButtonAction {

  override func execute() -> Bool {

    guard let isReachable = reachability?.isReachable() where isReachable else {
      print("No network connection")
      return false
    }

    return true
  }

}

class ShareTwitterAction : ShareButtonAction {

  override func execute() -> Bool {
    let result = super.execute()

    if result {
      //... your code here
    }

    return result
  }

}

关于ios - 当调用父类(super class)上的保护 block 时,是否有任何方法可以让子类的覆盖方法返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680179/

相关文章:

ios - 使用 Kiwi 测试核心数据实体的后台保存

ios - 带图像的滞后滚动 TableView

iphone - NSManagedObjectContext Reset 似乎正在丢失数据?

ios - UITableView 继续查看 Controller 不工作

ios - 使用 CoreData 以编程方式创建实体/表,并在适用于 iOS 的 Swift 3 中将值插入该实体

ios - 带整数的 switch 语句

iphone - 从 SWF 到 AIR 再到 iOS 应用程序

ios - 应用程序 ID(团队 ID)

iphone - 缩小时 UIImageView 在屏幕上居中

ios - 为什么我没有获得 UIScrollView 的实际 contentSize?