【问题标题】:Convert if ((loc = [player locateCardValue:8]) > - 1) to Swift 3将 if ((loc = [player locateCardValue:8]) > - 1) 转换为 Swift 3
【发布时间】:2017-01-18 16:14:47
【问题描述】:

你会如何转换这个 Objective-C

if ((loc = [player locateCardValue:8]) > -1) {

到 Swift 3?

[player locateCardValue] 返回卡'8' 所在位置的整数。返回-1 表示没有找到卡'8'

我可以使用...

let loc = player.locateCard(withValue: 8)
if loc > -1 {

但我有多个 IF 嵌套,它会变得非常混乱。

【问题讨论】:

  • Swift 和 Objective-C 版本都有一个if...

标签: objective-c swift code-conversion


【解决方案1】:

也许最好的方法不是“按原样”转换它,而是让它更像 Swift。

在这种情况下,我想我会将locateCard 更改为返回Optional<Int>,并在找不到卡时返回nil

func locateCard(withValue: Int) -> Card? {
    // return the position if found, nil otherwise
}

然后,你可以写

if let card = player.locateCard(withValue: 8) {

}

【讨论】:

  • 对于协议:Objective-C 的代码不是 Objective-C'ish。
  • 如何减少嵌套if的数量?
【解决方案2】:

您最好的选择是将locateCardValue 转换为可选的Int?。然后你可以简单地做

if let loc = player.locateCard(withValue: 8) {
    // ...
}

或者你可以使用 switch 语句

switch player.locateCard(withValue: 8) {
case -1: print("No card.")
case 1: // ...
// etc.
}

【讨论】:

  • 谢谢。我想我已经挂断了保持 -1 返回值。可选值也可以。
猜你喜欢
  • 2017-02-03
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2017-10-15
  • 2019-08-11
  • 2017-03-19
相关资源
最近更新 更多