Rob*_*ins 4 swift swift-extensions
我想为我的结构创建一个 init 方法,其中包含一堆用于单元测试的默认值。我不希望主模块能够看到这个 init 方法。
我以为我可以简单地在我的测试类文件中创建结构的扩展,但这不起作用:
Foo.swift(在应用程序目标中):
public struct Foo {
public let bar: Int
public init(colour: String) {
self.bar = colour == "Green" ? 0 : 1
}
}
Run Code Online (Sandbox Code Playgroud)
FooExtension.swift(在测试目标中):
extension Foo {
public init(bar: Int = 42) {
self.bar = bar
}
}
Run Code Online (Sandbox Code Playgroud)
请注意主文件中的非默认初始化程序,因此 Swift 编译器不会自动为我创建成员初始化程序。也许这与问题有关,也许不是。
Swift 编译器抱怨Cannot assign to 'bar' in 'self'。但是当我将该 init 方法复制到Foo我的主要目标中结构的原始定义中时,它工作正常。无论是否使用默认参数值,我都会得到相同的结果。
这是一个 Swift 编译器错误还是与在一个模块中为另一个定义的结构定义扩展有关?当我尝试在 Playground 中复制它时,一切正常。
我使用 Swift 1.2 和 Xcode 版本 6.4 (6E35b)