尝试编译一个测试用例,其中在没有运气的闭包中使用了XCTAssertNoThrow
。为什么会这么僵化,它会再次出现还是发生了什么?
let e = expectation(description: "Wait")
distillery.produce(request: Request(bottles: 1337)) { (result) in // error
XCTAssertNoThrow(try result.unwrap())
e.fulfill()
}
Xcode在编译期间引发错误:
从类型为“(”throws->()”的引发函数进行的转换无效
到非引发函数类型'(result)->void'
附言:这看起来像是斯威夫特的臭虫,我想https://bugs.swift.org/browse/SR-487
最佳答案
通过将XCTAssertNoThrow
包装成一个助手函数来解决这个问题
func assertOk<T>(_ result: Result<T>, file: StaticString = #file, line: UInt = #line) {
XCTAssertNoThrow(try result.unwrap(), file: file, line: line)
}
关于swift - 在闭包中调用时,XCTAssertNoThrow不会编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48487956/