Swift 继承问题。如何获得合适的类对象

标签 swift

我有两个类(为了简化,我删除了其他字段,对象比 Person 更复杂):

class Person
{
  var name: String = "Default name"

  init(object: PersonEntity)
  {
    name = object.daysMask
  }
}

class Employer: Person
{

}

我有为我配置一个人的功能

func getConiguratedPerson(name: String) -> Person
{
  let person = Person()
  person.name = name
}

如果我想得到Person,我只需这样做:

let person = getConiguratedPerson("Alex")

但是如果我需要 Employer 并且我也想使用这个函数怎么办

let employer = getConiguratedPerson("Alex") // returns Person as expected but need to have employer instead.

在 Objective-C 中我们可以简单地做到这一点:

Employer *employer = Employer([self getConiguratedPerson:"Alex"]) if I remember.

最佳答案

错误是 getConfiguredPerson 函数。你想要一个初始化程序。初始化器返回您自己的类,这正是您想要的。

class Person {
  var name: String = "Default name"

  init(name: String) {
      self.name = name
  }

  init(object: PersonEntity) {
      self.init(object.daysMask)
  }
}

class Employer: Person {}

现在要创建一个人,您只需使用 Person(name: "Alex") 并使用 Employer(name: "Alex") 获得雇主。

请注意,这在 ObjC 中也是如此。你也不应该在那里有 getConfiguredPerson 。你应该有 [Person initWithName:]

关于Swift 继承问题。如何获得合适的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666077/

相关文章:

swift - 在 Swift 中将套接字响应转换为字典

swift - 为什么这个函数没有返回任何东西?

ios - watchOS2 和 iOS8 的困境

ios - UIScrollView 内的 UITableView

objective-c - NS_SWIFT_NAME 不工作 : 'swift_name' attribute has invalid identifier for parameter name

ios - Apple 的 On Demand Resource System 如何将文件下载到 App 的 Main Bundle 中?

ios - 如何更改 SKscene 大小

arrays - 追加数组自定义函数不起作用

design-patterns - 如何在 Swift 中将对象映射到枚举而不引发异常

ios - JSQMessageData 追加 Json 数据