gpt4 book ai didi

ios - 如何在 Swift 中覆盖和使用 alloc?

转载 作者:行者123 更新时间:2023-11-28 13:07:26 25 4
gpt4 key购买 nike

如何覆盖对象创建(分配)并添加自定义逻辑?原因是我总是为每个模块(屏幕)使用 3 个类来构建我的通用应用程序,例如

1. LoginViewController  // this inherits from BaseViewController and holds common code for both ipad and iphone 
2. LoginViewController_iphone // custom logic for iphone only
3. LoginViewController_ipad // custom logic for ipad only

最酷的部分是我在代码周围使用没有后缀的 Controller ,因为它们都是从 BaseViewController 扩展而来的,并且它覆盖了 alloc 方法,该方法执行智能逻辑并在调用 VC alloc/init 时自动选择正确的类。

现在,随着我们都开始慢慢过渡到 Swift,我也设法在 Swift 1.2 中覆盖并实现了 alloc 方法。这是实现:

class BaseViewController: UIViewController {

override class func alloc() -> BaseViewController {

var viewControllerClassName : String = NSStringFromClass(self)

if ((viewControllerClassName.lowercaseString.rangeOfString("ipad") == nil) && (viewControllerClassName.lowercaseString.rangeOfString("iphone") == nil)) {

switch (UIDevice.currentDevice().userInterfaceIdiom) {

case .Pad:

viewControllerClassName += "_ipad";

case .Phone:

viewControllerClassName += "_iphone";

default:

viewControllerClassName += "";
}

let viewControllerClass : AnyClass = NSClassFromString(viewControllerClassName)

return viewControllerClass.alloc() as! BaseViewController

} else {

return super.alloc() as! BaseViewController
}
}

今天,我使用 Swift 2 下载了 Xcode 7 beta 6 并尝试编译该项目,但收到令人讨厌的意外消息“alloc() 在 Swift 中不可用:改用对象初始化器”。好吧,我不介意其他开发人员更喜欢使用不同的方法,但是拥有更多的灵 active 总比拥有更少的灵 active 要好。有人知道如何覆盖类对象的创建并添加自定义逻辑吗?

最佳答案

Alloc being callable was an oversight ,根据 Swift 的开发者 Chris Lattner 的说法。

您将不得不迁移到对象初始值设定项。

关于ios - 如何在 Swift 中覆盖和使用 alloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32309219/

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