2017-06-18 7 views
3

ここには、私が迅速なTic Tac Toeプロジェクトで持っているコードがあります。しばらくするにはどうすればいいですか?

var inputTuple = readPositionsFromUser() 

while inputTuple == nil { 
    print() 
    print("Pay attention!") 
    print() 
    sleep(1) 
    inputTuple = readPositionsFromUser() 
} 

let (row, col) = inputTuple! 

ReadPositionsFromUser()は、入力された行と列にユーザに要求し、それはちょうど二つIntsを解析することができない限りはnilを返し、それらのIntsは、チックタックトーボードの範囲内です。

最後の行にある!がちょっと不必要なので、もっと慣れ親しんだ方法があるのでしょうか?コードのその時点に達している場合、私はInputTupleがゼロでないことを知っているので、!を使用すると愚かなようです。

EDIT:これはクロスプラットフォームのコマンドラインアプリケーションであることを明確にする必要があります。私はココアなどを使用していません。

+0

whileループ(待機中)の代わりに、基本的にユーザー入力(通知)を通知するパターンを使用する必要があります。 – vadian

+0

もう少し説明していただけますか? –

答えて

4

スウィフトコンパイラは、最後のステートメントでinputTupleをゼロにすることはできません(リリースビルドを最適化する場合)。

しかし、とにかくそれを除去したい場合は、オプションのタプルを返す関数にループをラップすることができます。

let (row, col): (Int, Int) = { 
    while true { 
     if let inputTuple = readPositionsFromUser() { return inputTuple } 
     print("\nPay attention!\n") 
     sleep(1) 
    } 
}() 

print("row=\(row) col=\(col)") 
+0

私は何か他のことを望んでいたと思います...正確に何が分かっていないのでしょうか、多分言語に根ざしたものです。しかし、とにかく提案してくれてありがとう、私は正しい答えとしてそれを受け入れるだろう。 –

関連する問題