2017-01-18 5 views
2

あなたはスウィフト3に、このObjective-Cのは、変換((LOC = [プレーヤーlocateCardValue:8])> - 1)スウィフト3に

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

を変換するだろうか?

[player locateCardValue]は、カード'8'が見つかった場所の整数を返します。 -1を返すと、カード'8'が見つかりませんでした。

私が使用することができ

...

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

が、私はIFの複数のネストを持っており、それは本当に厄介になるだろう。

+0

を使用することができます両方スウィフトとObjective-Cのバージョンは 'if' ...プロトコルの –

答えて

2

あなたの最良のオプションは、オプションのInt?を返すようにlocateCardValueを変換することで作成することができます。そして、あなたは単に

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

「最良の方法」は、「そのまま」変換するのではなく、よりスピーディーにすることです。

この場合、カードが見つからない場合、を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'の数を減らすにはどうすればいいですか? –

関連する問題