Swift 协议与异步重载的一致性

Swift protocol conformance with async overload

提问人:Darko 提问时间:6/29/2023 更新时间:6/30/2023 访问量:176

问:

为什么它能成功编译和运行?(斯威夫特 5.8)

protocol AsyncOverloaded {
    func load()
    func load() async throws
}

class MyClass: AsyncOverloaded {
    func load() {
        print("load called")
    }
}

let myClass = MyClass()
myClass.load()
// prints "load called"

据我了解,实际上不符合协议.MyClassAsyncOverloaded

提前致谢。

iOS Swift 异步 async-await 协议

评论

0赞 Rob 7/2/2023
请注意,当您从异步上下文中时,编译器会警告您(但不是硬错误)它无法解析它。try await myClass.load()

答:

3赞 JeremyP 6/30/2023 #1

中的函数满足这两个协议要求。load()MyClass

非投掷函数满足投掷函数的要求,因为它就像一个从未实际投掷的投掷函数。同样,同步函数也可以满足要求。async

评论

0赞 Darko 7/1/2023
谢谢。你有这方面的参考吗?一些文档?
1赞 Rob 7/2/2023
@Darko - 请参阅 SE-0296 - Async/await - 协议一致性。这专注于满足要求的同步函数,但你明白了。S2async