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

How do I create an init method for a struct which is only visible in tests?

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

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

Foo.swift(在应用目标中):

public struct Foo {

    public let bar: Int

    public init(colour: String) {
        self.bar = colour == "Green" ? 0 : 1
    }

}

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

extension Foo {

    public init(bar: Int = 42) {
        self.bar = bar
    }

}

注意主文件中的非默认初始化器,因此 Swift 编译器不会自动为我创建成员初始化器。也许这与问题有关,也许不是。

Swift 编译器抱怨 Cannot assign to 'bar' in 'self'。但是当我将该 init 方法复制到我的主要目标中 Foo 结构的原始定义中时,它工作正常。无论是否使用默认参数值,我都得到相同的结果。

这是 Swift 编译器错误还是与在一个模块中为另一个模块中定义的结构定义扩展有关?当我尝试在 Playground 中复制它时一切正常。

我正在使用 Swift 1.2 和 Xcode 版本 6.4 (6E35b)

我已经对我提交的雷达做出了回应;我现在要的是 explicitly disallowed.