2017-01-18 9 views
2

Как бы вы преобразовать этот Objective-CПреобразовать если ((LOC = [игрок locateCardValue: 8])> - 1) для Swift 3

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

Свифта 3?

[player locateCardValue] возвращает целое число, в котором была найдена карта '8'. Возврат -1 означает, что он не нашел карту '8'.

я мог бы использовать ...

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

, но у меня есть несколько вложенности, если это и было бы получить очень грязно.

+0

И Swift и версия Objective-C есть 'if' ... –

ответ

2

Ваш лучший вариант заключается в преобразовании locateCardValue вернуть факультативный Int?. Тогда вы могли бы просто сделать

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

Или вы можете использовать переключатель заявление

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

Спасибо. Наверное, я повесил трубку, сохранив возвращаемое значение -1. Необязательное значение также работает. – Johnne

5

Возможно, лучший подход - не преобразовать его «как есть», но сделать его более похожим на Swift.

В этом случае я думаю, что я бы изменил locateCard, чтобы вернуть Optional<Int> и вернуть nil, когда карта не найдена.

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

Затем, вы можете просто написать

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

} 
+0

Для протокола: The Objective-C кусок кода не является Objective-C'ish. –

+0

Как уменьшить количество вложенных 'if'? –