我有一个班级和一个班级。我想创建一个Admin对象,它可以访问Admin和SecurityGuard方法。我不想创建第三个类(因为各种明显的原因,比如将来的更改很容易实现),有没有办法让一个对象使用来自两个不相关类的方法?
谢谢您。

最佳答案

使用两个协议并在一个类中实现它们。这里有一个简单的例子让你开始。

protocol Admin {
  var isAdmin: Bool { get }
}

protocol SecurityGuard {
  func protect()
}

class SecuritySupervisor: Admin, SecurityGuard {
  var isAdmin = true

  func protect() {
    print("You're protected")
  }
}

let securitySupervisor = SecuritySupervisor()
securitySupervisor.isAdmin   // true
securitySupervisor.protect() // prints "You're protected"

还要记住,如果您希望在多个类中使用相同的实现,协议可以具有默认实现:
protocol Admin {
  var isAdmin: Bool { get }
}

protocol SecurityGuard {
  func protect()
}

extension SecurityGuard {
  func protect() {
    print("You're protected")
  }
}

class SecuritySupervisor: Admin, SecurityGuard {
  var isAdmin = true
}

class NormalGuard: SecurityGuard {}

let securitySupervisor = SecuritySupervisor()
securitySupervisor.isAdmin
// works like before
securitySupervisor.protect()
// same implementation
NormalGuard().protect()

关于swift - 2类对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35134336/

10-15 15:16