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

时间:2015-02-18 10:17:46

标签: swift swift-extensions

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

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

Foo.swift(在app目标中):

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)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-2)

以下是您提问的好例子。

extension Foo {

  var text: String
  var response: String?

  init(text: String) {
     self.text = text
  }
}