2017-01-18 20 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'的数量? –