尝试编译一个测试用例,其中在没有运气的闭包中使用了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/

10-14 23:15