gpt4 book ai didi

ios - 使用静态方法时如何获取特定实例

转载 作者:搜寻专家 更新时间:2023-10-31 22:04:07 34 4
gpt4 key购买 nike

我希望在使用我的静态方法时得到一个特定的实例。例如:

class Food: NSObject {
var name: String

class func initFruit() -> Food? {
let fruitName = NSStringFromClass(self).components(separatedBy: ".").last! as String

if "Apple" == fruitName {
return Apple(name: fruitName)
} else if "Orange" == fruitName {
return Orange(name: fruitName)
}
return nil
}

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

}

class Apple: Food {
}
class Orange: Food {
}

当我使用以下方法创建 Apple 实例时:

let apple = Apple.initFruit() as? Apple

如何获取特定实例 apple 而不是使用 as?苹果?我想知道如何修改方法:

 static func initFruit() -> Food?

最佳答案

你的设计有几个问题,让我试着列举一下:

  • 基类不应该知道它们的子类,这是不好的做法并且不可扩展,因为添加新的子类需要维护基类方法
  • 根本不需要静态方法,至少在问题中所写的形式中,您可以简单地直接调用子类的初始化程序

抛开所有这些,您可以使用 Self 作为静态方法的返回类型,这将允许动态结果。

class Food: NSObject {
var name: String

class func initFruit() -> Self {
let fruitName = NSStringFromClass(self).components(separatedBy: ".").last! as String

return self.init(name: fruitName)
}

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

}

class Apple: Food {
}
class Orange: Food {
}

let apple = Apple.initFruit() // is an Apple, no cast needed

关于ios - 使用静态方法时如何获取特定实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54682497/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com