Swift 如何为仅在测试中可见的结构创建init方法?

Swift 如何为仅在测试中可见的结构创建init方法?,swift,swift-extensions,Swift,Swift Extensions,我想为我的结构创建一个init方法,其中包含一组默认值,以便在单元测试中使用。我不希望主模块能够看到这个init方法 我想我可以简单地在测试类的文件中创建结构的扩展名,但这不起作用: Foo.swift(应用内目标): FooExtension.swift(在测试目标中): 注意主文件中的非默认初始值设定项,因此Swift编译器不会自动为我创建memberwise初始值设定项。也许这和问题有关,也许不是 Swift编译器抱怨无法分配给“self”中的“bar”。但是,当我将init方法复制到主目

我想为我的结构创建一个init方法,其中包含一组默认值,以便在单元测试中使用。我不希望主模块能够看到这个init方法

我想我可以简单地在测试类的文件中创建结构的扩展名,但这不起作用:

Foo.swift(应用内目标):

FooExtension.swift(在测试目标中):

注意主文件中的非默认初始值设定项,因此Swift编译器不会自动为我创建memberwise初始值设定项。也许这和问题有关,也许不是

Swift编译器抱怨
无法分配给“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:你能把你的代码放在这里吗。我刚刚尝试了类似的事情(在主应用程序中使用parametrised
init(…)
,并使用
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
  }
}