Swift - 在静态/class 函数中引用当前 class 类型
Swift - Refer to current class type in a static / class function
我有静态函数来实例化看起来像
的视图控制器
class AController: UIViewController {
static func instantiate() -> AController {
let storyboard = UIStoryboard(name: "AController", bundle: nil)
let controller = s.instantiateInitialViewController() as? AController
return controller!
}
}
class BController: UIViewController {
static func instantiate() -> BController {
let storyboard = UIStoryboard(name: "BController", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as? BController
return controller!
}
}
我有一堆这样的,所以我想把它弄得更干净:
class MYViewController: UIViewController {
class func instantiate() -> self.type {
let storyboard = UIStoryboard(name: "\(self.type)", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as? self.type
return controller!
}
}
class AController: MYViewController {
}
class BController: MYViewController {
}
但我不知道如何在静态/class 函数中动态引用对象的类型,以及如何在从子class。一旦用 type(of: object)
实例化了一个对象,这很容易做到
试试这个:
class MYViewController: UIViewController {
class func instantiate() -> Self {
let storyboard = UIStoryboard(name: "\(self)", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as! Self
return controller
}
}
我不是 100% 确定它是否有效,因为我没有直接测试你的代码(不想创建一个故事板只是为了测试),但我写了类似的代码来测试它,它有效:
class MYViewController: UIViewController {
class func instantiate() -> Self {
print("type: \(self)")
return self.init()
}
}
我有静态函数来实例化看起来像
的视图控制器class AController: UIViewController {
static func instantiate() -> AController {
let storyboard = UIStoryboard(name: "AController", bundle: nil)
let controller = s.instantiateInitialViewController() as? AController
return controller!
}
}
class BController: UIViewController {
static func instantiate() -> BController {
let storyboard = UIStoryboard(name: "BController", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as? BController
return controller!
}
}
我有一堆这样的,所以我想把它弄得更干净:
class MYViewController: UIViewController {
class func instantiate() -> self.type {
let storyboard = UIStoryboard(name: "\(self.type)", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as? self.type
return controller!
}
}
class AController: MYViewController {
}
class BController: MYViewController {
}
但我不知道如何在静态/class 函数中动态引用对象的类型,以及如何在从子class。一旦用 type(of: object)
试试这个:
class MYViewController: UIViewController {
class func instantiate() -> Self {
let storyboard = UIStoryboard(name: "\(self)", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as! Self
return controller
}
}
我不是 100% 确定它是否有效,因为我没有直接测试你的代码(不想创建一个故事板只是为了测试),但我写了类似的代码来测试它,它有效:
class MYViewController: UIViewController {
class func instantiate() -> Self {
print("type: \(self)")
return self.init()
}
}