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

ios - 在 Swift 4 中,当我想要时转到下一个

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

我正在使用 for in 制作大约 20 个单元格项目。

但是在 for in 中有 DispatchQueue.main.async 并且 for in 在它结束之前进入下一个。

所以我想在 DispatchQueue.main.async 完成后完成。

这是代码:

for item in 0 ..< collectionView.numberOfItems(inSection: 0)
{
    let indexPath = IndexPath(item: item, section: 0)
    var photoHeight = CGFloat(50.0)

    _ = delegate.collectionView(collectionView, heightForPhotoAtIndexPath: indexPath)
    { (value) in
        DispatchQueue.main.async
            {
                photoHeight = value

                let height = self.cellPadding * 2 + photoHeight
                let frame = CGRect(x: xOffset[column], y: yOffset[column], width: columnWidth, height: height)
                let insetFrame = frame.insetBy(dx: self.cellPadding, dy: self.cellPadding)

                let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)
                attributes.frame = insetFrame
                self.cache.append(attributes)

                self.contentHeight = max(self.contentHeight, frame.maxY)
                yOffset[column] = yOffset[column] + height

                column = column < (self.numberOfColumns - 1) ? (column + 1) : 0
            }
    }

    // DispatchQueue.main.async is not finish, but it runs here.
}



Best Answer-推荐答案


你甚至不需要在这里使用 DispathQueue.main.async。你没有做任何 UI 工作,所以你不必在主线程上。

异步调用不会像您期望的那样按顺序运行。想想网络调用..

print('starting network call')

NetworkClient.get(url) { response, error in 
    print('returned from network')
}

print('function complete')

如果你这样调用它,可能的输出是:

starting network call

function complete

returned from network

这是因为异步函数被调度并需要时间来完成,但在此过程中执行可以继续。一旦网络调用完成,回调/完成处理程序将被调用,然后该代码将运行。

Here is another example Swift 中的异步函数调用次数

关于ios - 在 Swift 4 中,当我想要时转到下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041027/

回复

使用道具 举报

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

本版积分规则

关注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