我想为我的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)
答案 0 :(得分:2)
我对我提交的雷达做出了回应;我现在要求的是explicitly disallowed。
答案 1 :(得分:-2)
以下是您提问的好例子。
extension Foo {
var text: String
var response: String?
init(text: String) {
self.text = text
}
}