Swift 中的 `async let` 声明的类型是什么?
What is the type of `async let` declaration in Swift?
Swift 5.5引入协程,分层任务管理和功能挂起。
其中一项新功能是
的语法
async let image = downloadImage(url)
图像的声明可以await
。但问题是,它的类型是什么? Xcode 表示它的类型是什么?我可以声明什么类型的函数参数来接受这个对象?
the question is, what is its type?
这个问题的解决方法与 any 带有初始化的变量声明相同:通过等号右侧的类型。
例如,如果您有一个方法 return 是一个字符串(我们将其命名为 getMyString
),那么当您说
let s = getMyString()
...s
类型为字符串,从被调用方法的 return 类型推断。
嗯,跟async let
没什么区别:
async let s = getMyString()
如果 getMyString
return 是一个字符串,s
将是一个字符串。
唯一的区别是,假设,String 是return异步。但这对这里的整体语法没有影响。即async/await
的全部点;它允许您在正常 Swift 语法范围内异步调用代码(而不是必须使用 GCD 闭包绕着月亮跳舞)。
与许多其他编程语言不同,Swift 的并发模型根本不使用 Future
、Promise
或类似类型。
表达式要么需要 await
ed,要么不需要。
因此,可以在其他编程语言(例如 JavaScript)中使用 async/await 实现的东西在 Swift 中不起作用:
func test() async {
let a = getNumber() // error: Expression is 'async' but is not marked with 'await'
print(await a) // warning: No 'async' operations occur within 'await' expression
}
func getNumber() async -> Int {
42
}
这是 async let
语法的原因之一:它允许您调用异步函数,但将 await
ing 推迟到以后。
Swift 5.5引入协程,分层任务管理和功能挂起。 其中一项新功能是
的语法async let image = downloadImage(url)
图像的声明可以await
。但问题是,它的类型是什么? Xcode 表示它的类型是什么?我可以声明什么类型的函数参数来接受这个对象?
the question is, what is its type?
这个问题的解决方法与 any 带有初始化的变量声明相同:通过等号右侧的类型。
例如,如果您有一个方法 return 是一个字符串(我们将其命名为 getMyString
),那么当您说
let s = getMyString()
...s
类型为字符串,从被调用方法的 return 类型推断。
嗯,跟async let
没什么区别:
async let s = getMyString()
如果 getMyString
return 是一个字符串,s
将是一个字符串。
唯一的区别是,假设,String 是return异步。但这对这里的整体语法没有影响。即async/await
的全部点;它允许您在正常 Swift 语法范围内异步调用代码(而不是必须使用 GCD 闭包绕着月亮跳舞)。
与许多其他编程语言不同,Swift 的并发模型根本不使用 Future
、Promise
或类似类型。
表达式要么需要 await
ed,要么不需要。
因此,可以在其他编程语言(例如 JavaScript)中使用 async/await 实现的东西在 Swift 中不起作用:
func test() async {
let a = getNumber() // error: Expression is 'async' but is not marked with 'await'
print(await a) // warning: No 'async' operations occur within 'await' expression
}
func getNumber() async -> Int {
42
}
这是 async let
语法的原因之一:它允许您调用异步函数,但将 await
ing 推迟到以后。