【发布时间】:2020-06-28 22:37:14
【问题描述】:
创建一个简单的纸牌游戏(Set),我在模型中有一个函数可以将 X 牌发到牌组上。目前,当我单击交易卡按钮时,它们都会同时显示,因此我添加了计时器,以便它们一个接一个地出现。这给出了错误“转义闭包捕获变异'self'参数”关于我可以修复什么的任何想法?
mutating func deal(_ numberOfCards: Int) {
for i in 0..<numberOfCards {
Timer.scheduledTimer(withTimeInterval: 0.3 * Double(i), repeats: false) { _ in
if deck.count > 0 {
dealtCards.append(deck.removeFirst())
}
}
}
}
【问题讨论】:
-
您应该仅在更新 UI 时使用计时器。做你的洗牌/交易,一旦你完成了调用一个只更新 UI 的方法
-
我会使用 UIView 动画而不是计时器
-
"让它们一个接一个地出现" 这是视图的工作,而不是模型的工作。模型应该保持不变。将计时器代码移动到您的视图中。
-
@Sweeper 这就是我想要做的,但我发现这样做的唯一方法是让 View 执行 ForLoop,这会在代码的后面产生问题。有没有办法让模型中的交易函数将所有 X 卡添加到数组中,然后视图将每张卡一张一张地添加?
-
@LeoDabus 如果通过将卡片添加到模型中的数组来完成发牌和洗牌,我如何使它们全部单独动画。除非从视图中调用 dealcard 12。