2017-01-18 21 views
2

如何將你這個Objective-C的轉換轉換IF((LOC = [播放器locateCardValue:8])> - 1)斯威夫特3

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

斯威夫特3?

[player locateCardValue]返回找到卡'8'的位置的整數。返回-1表示它沒有找到卡'8'

我可以使用...

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

,但我有IF的多重嵌套,它會帶來麻煩。

+0

無論是斯威夫特和Objective-C的版本有一個'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. 
} 
+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

對於協議:Objective-C的片的代碼不是Objective-C'ish。 –

+0

如何減少嵌套'if'的數量? –