ios - 视图控制器所需的便利性导致的 Swift 错误
问题描述
我正在玩弄一个在视图控制器中设置登录名的工厂,以满足我自己正在发生的事情(这是我正在更新的旧代码)我试图让这个尽可能简单的例子。
它崩溃了!
视图控制器
init(loginServerClass: String){
super.init(nibName: nil, bundle: nil)
}
//called to initialize the login server class
public init?(coder aDecoder: NSCoder, loginServerClass: String){
super.init(coder: aDecoder)
}
//called from storyboard
required convenience init?(coder aDecoder: NSCoder) {
self.init(coder: aDecoder)
}
使用登录工厂
public protocol LoginFactoryProtocol{
static func createLogin () -> String
}
class LoginFactory : LoginFactoryProtocol {
static public func createLogin () -> String {
return "testlogintype"
}
}
所以1)。它与上面的最小示例崩溃(访问错误)
2)。当我添加我喜欢的便利 int 时,它会崩溃,如下所示:
required convenience init?(coder aDecoder: NSCoder) {
self.init(coder: aDecoder, loginServerClass: LoginFactory.createLogin() )
}
(此编码器要求从 initWithCoder 返回替换的对象:)
如何编译这个最小代码?
Github 链接https://github.com/stevencurtis/initissue
如果投票者可以解释原因,那将不胜感激,因为如果不知道需要添加什么,我就无法改进。我已经添加了错误消息,一个带有问题的 Github 链接。我已经列出了我尝试过的内容,并且我将从现有的先前工作代码到一个小示例(因此我已经尝试过,文档是https://docs.swift.org/swift-book/LanguageGuide/ Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_324和关于堆栈溢出的类似问题没有帮助(他们似乎有相同的问题,即(NSGenericException:此编码器要求从 initWithCoder 返回替换的对象)) )。根据定义,这是问题的一个小例子。我相信这是一个问题的结构(来自https://stackoverflow.com/help/how-to-ask),所以请告诉我:我还需要做什么才能写出一个好问题,好吗?
解决方案
一种解决方案(我不知道这是否是一种好习惯)似乎是使用一个调用 super.init 的初始化程序
public required init?(coder aDecoder: NSCoder) {
loginServerClass = LoginFactory.createLogin()
super.init(coder: aDecoder)
}
然后有一个用于测试和模拟的初始化程序(或从代码中创建视图控制器)
init(loginServerClass: String){
self.loginServerClass = loginServerClass
super.init(nibName: nil, bundle: nil)
}
推荐阅读
- web-scraping - 抓取 Spectrum 社区数据的最佳方式是什么?
- firebase - 从 Cloud Function 调用 Cloud Run:IAM 身份验证
- python - python子进程杀死行为
- javascript - 如何为插入的元素的后代设置样式(在 shadowroot 的样式表中)?
- mongodb - 一段时间后 Azure 容器实例中的 MongoDb 失败
- python - 如何处理 Pandas 中等于“NA”的列?
- amazon-s3 - 您可以将 .aws/config 中的代码直接放入您的程序吗?
- powershell - 使用 Powershell 捕获数据输出并将日期和时间包含到 CSV 文件中
- ruby-on-rails - 在 Rails 中,如何轻松地将所有记录重置为模型文件中声明的默认属性值?
- latex - 打开 Latex Overleaf 模板:Parskip.sty 未找到?