Swift 如何为仅在测试中可见的结构创建init方法?
我想为我的结构创建一个init方法,其中包含一组默认值,以便在单元测试中使用。我不希望主模块能够看到这个init方法 我想我可以简单地在测试类的文件中创建结构的扩展名,但这不起作用: Foo.swift(应用内目标): FooExtension.swift(在测试目标中): 注意主文件中的非默认初始值设定项,因此Swift编译器不会自动为我创建memberwise初始值设定项。也许这和问题有关,也许不是 Swift编译器抱怨Swift 如何为仅在测试中可见的结构创建init方法?,swift,swift-extensions,Swift,Swift Extensions,我想为我的结构创建一个init方法,其中包含一组默认值,以便在单元测试中使用。我不希望主模块能够看到这个init方法 我想我可以简单地在测试类的文件中创建结构的扩展名,但这不起作用: Foo.swift(应用内目标): FooExtension.swift(在测试目标中): 注意主文件中的非默认初始值设定项,因此Swift编译器不会自动为我创建memberwise初始值设定项。也许这和问题有关,也许不是 Swift编译器抱怨无法分配给“self”中的“bar”。但是,当我将init方法复制到主目
无法分配给“self”中的“bar”
。但是,当我将init方法复制到主目标中我的Foo
struct的原始定义中时,它工作得很好。无论是否使用默认参数值,我都会得到相同的结果
这是一个Swift编译器错误,还是与在一个模块中为另一个模块中定义的结构定义扩展有关?当我尝试在操场上复制时,一切都很好
我正在使用Swift 1.2和Xcode 6.4版(6E35b)下面就是一个很好的例子
extension Foo {
var text: String
var response: String?
init(text: String) {
self.text = text
}
}
我已经收到了对我提交的雷达的回复;我现在要求的是。如果属性声明为
public var
,而不是public let
,则它可以工作。对我来说这看起来像一个bug。啊,好的一点,我没有指定它是一个不可变的结构,所有的属性都是let
@RobertAtkins:你能把你的代码放在这里吗。我刚刚尝试了类似的事情(在主应用程序中使用parametrisedinit(…)
,并使用init()
为测试类中的let
-属性分配预定义值来扩展类型),效果很好。
extension Foo {
public init(bar: Int = 42) {
self.bar = bar
}
}
extension Foo {
var text: String
var response: String?
init(text: String) {
self.text = text
}
}