2017-01-06 5 views
1

私はオンラインコンパイラを使用する練習問題に取り組んでいます。私は以下のコードを書いたが、それはXcodeで動作するが、オンラインコンパイラは私が間違っていると言っている。ここで ループはパラメータとして関数を使用している間に迅速に処理できますか?

は私が知っている私のコードが右であるとXcodeで動作します:

たぶん私はオンラインのコンパイラは、私が見たことがないこのコードをオフに開始されているので、質問を理解していないよ
func squareThatNumber(input: Int) -> Int{ 
      let x: Int = input * input 
      return x 
     } 

     print(squareThatNumber(input: 5)) 

ループはこのよう書かれている間:

import Foundation 

while let line: String = readLine() { 
    print(line) 
} 

を誰かがそれがオンラインコンパイラでコンパイルが、私は関数を使用するwhileループを見たことがないので、上記のコードが何をしているのか説明することができます。これを詳細に説明する方向やリソースは大いに感謝しています。

+1

あなたは避ける必要があります'x'に':Int'、行に ':String'のような不要な型の注釈があります。また、一時変数 'x'を削除し、' return input * input'だけを使用します。意味のある変数名を持つ変数をそれ自身の変数に展開するという点がありますが、 'x'はそのような名前ではありません。 – Alexander

+0

@EricAyaコンパイラはエラーになりません。コンパイラがwhileループ関数を実行しているように思えるので、whileループに関数を挿入して、二乗された整数がwhileループの内側に出力されるようにしてください。 –

+3

Swiftリファレンスブックの「オプションバインド」を参照してください。 –

答えて

1

このコードは、すべての反復の開始時にreadLine()を呼び出します。その機能の結果はString?(a.k.a. Optional<String>)です。実際にStringがある場合は、変数lineにバインドされ、ブロックは1回呼び出されます。このプロセスは、バインディングが不可能になるまで、つまりreadLine()nilを返すまで繰り返されます。

+0

'?'がない場合は、オプションの文字列lはどうですか?タイプに追加されていますか? –

+1

@ user6510422どういう意味ですか? ['readLine()'は 'String?'を返します。](https://developer.apple.com/reference/swift/1641199-readline) – Alexander

+1

@ user6510422:これは「オプションバインド」と呼ばれます。これはSwiftの重要な概念です。あなたはそれについて読むべきです。 –

0

@Alexanderの回答は、何が起こっているのかを理解するための適切な情報を提供します。 SO検索した後、この課題はHackerRankであり、このSO question as well

にこのオンラインコンパイラで働いていたコードに答えものと同様であるアレクサンダーは、それがどのように動作するかを指摘以下の通りである:

import Foundation 

func squareThatNumber(input: Int) -> Int{ 
      let x = input * input 
      return x 
     } 

while let line: String = readLine() { 

    print(squareThatNumber(Int(line)!)) 

} 
関連する問題