我有以下代码(试图避免隐式展开):
class MyTests: XCTestCase {
var viewController: ViewController
}
但我收到以下错误:
Class 'MyTests' has no initializers
我解决了这个问题:
class MyTests: XCTestCase {
var viewController: ViewController
override init() {
self.viewController = ViewController()
super.init()
}
}
在 XCTest 类中使用 init()
会有问题吗?
我正在使用 Swift 4、Xcode 9.2。
最佳答案
我知道你想避免隐式解包,但不幸的是(除非你想经历编写自己的测试运行器的麻烦),你无法控制在测试运行时调用哪个初始化程序.
如您所知,您可以通过隐式解包并在 setUp()
中设置属性值来解决这个问题,它在每次测试之前都会被调用,因此您可以确保该属性将在你的测试中不是零。这样比较安全。
class MyTests: XCTestCase {
var viewController: ViewController!
override function setUp() {
super.setUp()
self.viewController = ViewController()
}
}
或者,您可以使属性惰性
,这意味着它不必隐式展开。这意味着该属性不必在对象初始化期间进行初始化,因此您无需编写新的初始化程序,而是会在第一次访问时进行初始化。
class MyTests: XCTestCase {
lazy var viewController: ViewController = {
return ViewController()
}()
}
关于ios - Swift:XCTest 类 'FirstDemoTests' 没有初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797202/