我制作了一个包装 Alamofire 的框架。
在我的框架中进行测试时(在测试目标中),我有这段代码可以正常工作。
import Foundation
@testable import NetworkManager
class MockRouter: Router {
enum APICalls {
case func1
case func2
}
var calls: APICalls!
init(calls: APICalls) {
self.calls = calls
}
}
当我将它作为框架添加到另一个项目时
import Foundation
import NetworkManager
class JokesRouter: Router {
enum APICalls {
case func1
case func2
}
var calls: APICalls!
init(calls: APICalls) {
self.calls = calls
}
}
我收到错误:
从初始化程序返回之前,不会在所有路径上调用 super init
所以我添加了 Super.init()
init(calls: APICalls) {
super.init()
self.calls = calls
}
现在我收到这个错误:
super.init 不能在初始化程序之外调用
知道有什么问题吗?
您需要声明一个空的public init() {}
in Router
.
虽然这是一个神秘的错误,但问题是子类无法调用super.init()
因为该初始化程序在外部不可访问NetworkManager
模块,除非您将其声明为public
。自动生成的init()
in Router
is not public
默认情况下。
它在你的测试类中有效,因为@testable import
回避默认值internal
访问限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)