• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何将实际数据从一个闭包获取到另一个闭包?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:24:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个阻塞时刻。在 case .successgetDataByDate 中,我得到了一些数据。是数组。之后,我需要将该数组插入 callAnother 并在循环中使用数组元素。我插入 myAnotherMethodcompletion block 中的每个元素我想创建 arrayForDataSourceSave 并将其发送到 self?.dataSource。保存(数据:数据,添加:arrayForDataSourceSave

每次我的 add 都是空的。如何解决这个问题?

private func callAnother(data: [AnyModel], completion: @escaping () -> Void) {
    var arrayForDataSourceSave: []()
    for element in data {
        guard let id = element.id else { return }
        APIService.myAnotherMethod(id: id, completion: { result in
            switch result {
            case .success(let well):
                arrayForDataSourceSave.append(well)
                print(well)
            case .error(let error):
                print("request error: \(error)")
            }
        })
    }
    completion()
}

func refresh(completion: @escaping () -> Void) {
    APIService.getDataByDate(date: date, completion: { [weak self] (result) in
        switch result {
        case .success(let data):
            self?.callAnother(data: data, completion: {
                self?.dataSource.save(data: data, add: arrayForDataSourceSave)
            })
        case .error(let error):
            print("request error: \(error)")
        }
        completion()
    })
}



Best Answer-推荐答案


我通过 DispatchGroup 找到了该任务的决定,并且我的代码运行良好:

private func callAnother(data: [AnyModel]) {

    let dispatchGroup = DispatchGroup()
    var arrayForDataSourceSave = [AnyModel]()

    for element in data {
        guard let id = element.id else { return }
        dispatchGroup.enter()
        APIService.myAnotherMethod(id: id, completion: { result in
            switch result {
            case .success(let well):
                arrayForDataSourceSave.append(well)
                print(well)
            case .error(let error):
                print("request error: \(error)")
            }
            dispatchGroup.leave()
        })
    }

    dispatchGroup.notify(queue: DispatchQueue.main) {
        self?.dataSource.save(data: data, add: arrayForDataSourceSave)
    }
}

func refresh(completion: @escaping () -> Void) {
    APIService.getDataByDate(date: date, completion: { [weak self] (result) in
        switch result {
        case .success(let data):
            self?.callAnother(data: data)
        case .error(let error):
            print("request error: \(error)")
        }
        completion()
    })
}

关于ios - 如何将实际数据从一个闭包获取到另一个闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47710360/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap