gpt4 book ai didi

swift - 如何返回在 Swift 任务中定义的变量

转载 作者:行者123 更新时间:2023-12-05 04:29:59 25 4
gpt4 key购买 nike

我有一个 Artist 类,下面是一个创建新 artist 并将其插入我的库数组的函数。因为 insertToArtists(artist:) 是一个异步函数,所以我必须将它包装在 Task 中。但我也希望我的 newArtist 返回刚刚创建的 artist

我的代码如下所示,但 Xcode 告诉我一个错误:No 'init' candidates produce the expected contextual result type 'Artist'

func newArtist(name: String, notes: String, artwork: NSImage?) -> Artist {
Task {
let artist = Artist(name: name, notes: notes, artwork: artwork)
await insertToArtists(artist: artist)
return artist
}
}

但是如果我像下面这样编写我的代码。它不会正常工作。它似乎在 insertToArtist(artist:) 之前返回了 artistartist 插入后如何返回。非常感谢您的帮助。

func newArtist(name: String, notes: String, artwork: NSImage?) -> Artist {
let artist = Artist(name: name, notes: notes, artwork: artwork)
Task {
await insertToArtists(artist: artist)
}
return artist
}

最佳答案

嗯,了解如何使用 newArtist 会很有用,但我相信您还需要将其设为异步。

func newArtist(name: String, notes: String, artwork: NSImage?) async -> Artist {
let artist = Artist(name: name, notes: notes, artwork: artwork)
await insertToArtists(artist: artist)
return artist
}

然后在调用 newArtist 的地方使用 Task

func whereYouUseNewArtist() {
//YourCode
Task {
//YourCode
x = await newArtist(name: name, notes: notes, artwork: artwork)
//YourCode
}
//YourCode
}

如果您需要使用 newArtist 的结果更新您的 UI,请记住在主线程中进行。您可以通过将 @MainActor 添加到您使用它的位置来实现。示例:

let artistToShowOnUI: Artist
@MainActor func whereYouUseNewArtist() {
Task {
artistToShowOnUI = await newArtist(name: name, notes: notes, artwork: artwork)
}
}

关于swift - 如何返回在 Swift 任务中定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72198519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com