我是Swift的新手......
我循环通过一手牌(下面未显示),并将每张牌与之前确定的最佳选项进行比较。如果它具有更好的值,则替换struct变量" bestOption"用这张卡和适当的值(penaltyValue,这是任意的,可以是-5,-1,9,199,对这个问题不重要)。
因此,对于我手中的每张牌,我都会打电话给#34; compareReplaceBestOption"那张卡片。
bestOption变量,一个结构,最初是空的(NONE值),因此将填充第一张卡和值。对于每个后续卡,我将卡与bestOption变量中的值进行比较(并可能替换)(具有某种值)。
这段代码很丑陋可能有几个原因(所有建议都很受欢迎),但真正打击ME的是对变量bestOption(结构)的双重赋值。
问题:是否有一个更优雅的解决方案,因此只有一个任务(我可以创建一个小功能来完成任务,但最后我在概念上最终会遇到同样的问题)
这句话两次伤害......
bestOption = ( card
, newPenaltyValue
)
(旁边信息:g.cardStack [0]是一张面朝上的转牌,牌面朝上。手牌与这张牌相比较)
//Find penalty and card for card in hand with lowest possible penalty
//AND without using the bonusChip
var bestOption: (card: Card!, penaltyValue: Int!)?
func compareReplaceBestOption(card: Card) {
let newPenaltyValue = card.nr - g.cardStack[0].nr - 1
if bestOption == nil { bestOption = ( card
, newPenaltyValue
)
} else
{ if ( newPenaltyValue < bestOption!.penaltyValue ) {
bestOption = ( card
, newPenaltyValue
)
}
}
}
答案 0 :(得分:1)
针对Swift 3.0进行了更新:
if let best = bestOption, best.penaltyValue > newPenaltyValue {
best = (car, newPenaltyValue)
}
(真的只是丢失了where
条款。)
旧的更新答案:
在重新审视这个答案之后,我认为我们可以进一步改进 SWIFTY:
if let best = bestOption where best.penaltyValue > newPenaltyValue { best = (car, newPenaltyValue) }
我们使用可选的展开功能和
where
- 子句来实现 提供一些额外的案例来检查(即使使用 now-unwrappedbest
)。更容易阅读,我们放弃了那令人讨厌的!
。
原始答案:
怎么样:
if bestOption == nil || newPenaltyValue < bestOption!.penaltyValue { bestOption = (car, newPenaltyValue) }