ios 表达式类型不明确,没有更多上下文xCode 14.1

dldeef67  于 2022-11-26  发布在  iOS
关注(0)|答案(1)|浏览(123)

有人能告诉我,我的代码有什么问题吗?或者我如何分解此方法以进行调试?我有最新的xCode v.14.1(14 B47 b),不知何故,它在v.13.4.1上编译-_-

extension WebSocket {
    @available(macOS 10.15, *) func connectUntilBody(write: String? = nil ) async throws -> Data? {
        try await withCheckedThrowingContinuation { continuation in // <-- Type of expression is ambiguous without more context
            var result: Result<Data?, Error> = .success(nil)
            onEvent = { [weak self] event in
                if let body = event.body {
                    result = .success(body)
                    let group = DispatchGroup()
                    if let write = write {
                        group.enter()
                        self?.write(string: write) {
                            group.leave()
                        }
                    }
                    group.notify(queue: .main) {
                        self?.disconnect()
                    }
                } else if case let .error(error) = event {
                    error.flatMap { result = .failure($0) }
                    self?.disconnect()
                } else if case .cancelled = event {
                    continuation.resume(with: result)
                }
            }
            connect()
        }
    }
}
7gcisfzg

7gcisfzg1#

主要问题有:
1.如果将函数标记为throws,则必须将错误标记为resume
1.您必须resume * 满意路径 * 中的数据。

  1. DispatchGroup没有意义。因为continuationasync,所以你可以在write闭包中使用resume
    1.您还必须确保resume只被调用一次
    要回答这个问题:
    如果编译器不能推断出continuation的类型,则必须对其进行注解。
(continuation: Result<Data?,Error>)in

但是,您也可以调用continuation.resume(returning:)来返回数据,调用continuation.resume(throwing:)来返回错误(请参阅问题1)。
你还应该返回非可选的Data,否则就是一个错误。顺便说一下,这是Result类型的目标。

相关问题