其他模块(例如XCTest项目)
无法使用数组扩展方法为简单起见,下面的代码什么也没做,但它可以用来重现错误
import Foundation
extension Array {
mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
从同一模块调用它可以按预期工作,但是从测试类中不能
class MyProjectTests: XCTestCase {
func testMoveObjectsFromIndexes1() {
var arr = ["000", "001", "002", "003"]
arr.myMethod(0)
}
}
我认为这是正确的,因为方法可见性仅限于其自己的模块,实际上我获得了错误'[String]' does not have a member named 'myMethod'
我尝试将扩展方法定义为public
,如下所示
extension Array {
public mutating func myMethod(toIndex: Int) -> Int! {
// no real code, it's here only to show the problem
return 0
}
}
但是我得到了编译错误'Extension of generic type 'Array<T>' from a different module cannot provide public declarations'
直到Beta 7使用public
解决了问题,但在XCode 6.1(6A1046a)下我得到了这个错误
如何修复它以在其他模块/项目下运行?
答案 0 :(得分:3)
Swift目前不允许公共扩展,因此您需要在项目中包含该扩展swift文件并将其作为目标的一部分。
答案 1 :(得分:1)
虽然没有完全解决原始问题,但我确实发现我可以通过导入带有@testable
指令的模块在Swift 2.0(在XCode 7.0下)测试扩展方法:
@testable import MyGreatModule