gpt4 book ai didi

ios - 对于 in,在 Swift 4 中需要时转到下一步

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:00:59 24 4
gpt4 key购买 nike

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

但是在for in 里面有DispatchQueue.main.async 并且for in 在它结束之前转到下一个。

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

这是代码:

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.
}

最佳答案

您甚至不需要在这里使用 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

这是因为异步函数被分派(dispatch)并且需要时间才能完成,但是执行可以继续进行。网络调用完成后,回调/完成处理程序将被调用,然后该代码将运行。

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

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

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