gpt4 book ai didi

ios - 在 TableView 委托(delegate)方法中发出异步请求

转载 作者:行者123 更新时间:2023-11-28 10:11:57 27 4
gpt4 key购买 nike

所以我有一个带有项目列表的 TableView 。只有具有最高权限级别的用户才能删除这些项目。当用户滑动 TableView 单元格以将其删除时,将调用 editActionsOptionsForRowAt。我通过进行服务器调用(异步)来检查此委托(delegate)方法中的用户权限。问题是我需要快速获取此信息,而且此代码无法编译,因为我无法在闭包中返回删除项。我该怎么做才能解决这个问题?

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
// ...

APIContentService.getUserPermission(projectKey: projectKey, stepKey: stepKey, userKey: userKey) { (accessLevel) in
if let level = accessLevel {
if level == .admin {
return [delete] // show delete item – COMPILER ERROR, can't return this in a closure
} else {
//
return [] // don't show anything
}
}
}

// ...
}

最佳答案

总之,不要尝试。委托(delegate)方法需要立即返回有效结果。您可以使用信号量或分派(dispatch)组来阻止委托(delegate)方法返回,直到您从服务器获得结果,但这是一个非常糟糕的想法。

正确的解决方案是在viewDidLoad中获取一次权限。将结果保存在属性中。然后在您的委托(delegate)方法中引用该属性。

当用户在此屏幕上时,每次 TableView 想要知道每行的编辑操作时,用户的权限都不会改变。因此,每次用户查看此屏幕时,您只需要获得一次权限。

关于ios - 在 TableView 委托(delegate)方法中发出异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850967/

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