2017-07-22 7 views
2

私はノブで、チュートリアルを行っているAppleのプレイグラウンドとランダムな本から学んでいます。私はクロージャを扱うチュートリアルに取り組んでいます。私はこれを別のチュートリアルでこれまでに終わったと見てきましたが、私はそれがまさに素人の言葉で何を意味するのか分かりません。「完了」とはスウィフトで何を意味しますか?

何が仕上げですか、何が完了しているのか、そして何の中にありますか?または、操作の順序が考えられますか?ここで

は、それが使用された機能です。

func playSequence(index: Int, highlightTime: Double){ 
     currentPlayer = .Computer 

     if index == inputs.count{ 
      currentPlayer = .Human 
      return 
     } 

     var button: UIButton = buttonByColor(color: inputs[index]) 
     var originalColor: UIColor? = button.backgroundColor 
     var highlightColor: UIColor = UIColor.white 

     UIView.animate(withDuration: highlightTime, delay: 0.0, options: [.curveLinear, .allowUserInteraction, .beginFromCurrentState], animations: { 
      button.backgroundColor = highlightColor 
     }, completion: { 
      finished in button.backgroundColor = originalColor 
      var newIndex: Int = index + 1 
      self.playSequence(index: newIndex, highlightTime: highlightTime) 
     }) 
    } 
+1

すべてが上から下に順番に並んでいます。最後の部分はアニメーションです... button backgroundColorはハイライトカラーに設定されています。アニメーションが完了すると(durationはメソッドの 'highlightTime'パラメータです)、完了ブロックのコードが実行されます。 – Adrian

+0

@Adrian質問は、特に「完成した部分」についてですが、「UIView animate ...」メソッドに関する一般的な質問ではありません。 – rmaddy

答えて

2

finishedcompletion閉鎖するパラメータです。 inは、Swiftのクロージャ構文の一部です。

UIView animate方法の完全な署名である:

クラスFUNCのアニメーション(withDuration時間:時間間隔、遅延:時間間隔、オプション:UIViewAnimationOptions = []、アニメーション:@escaping() - >ボイド、完了:((Bool)→Void)?= nil)

completionクロージャのパラメータに注意してください。コード内のfinishedは、そのパラメータに与えられた名前です。

completionパラメータの状態についてのドキュメントからの抜粋:

このブロックには、戻り値はありませんし、完了ハンドラが呼び出される前にアニメーションが実際に終了したかどうかを示す単一のブール引数を取ります。

ようなコードを書くためのより多くの一般的な方法は次のとおりです。この構文は、使用している構文よりも、それが明確になり

UIView.animate(withDuration: highlightTime, delay: 0.0, options: [.curveLinear, .allowUserInteraction, .beginFromCurrentState], animations: { 
    // animation code 
}) { (finished) in 
    // completion code 
} 

。これは、「末尾閉包」の構文も使用しています。

もう一つの方法は、使用状況に近い、次のようになります。

UIView.animate(withDuration: highlightTime, delay: 0.0, options: [.curveLinear, .allowUserInteraction, .beginFromCurrentState], animations: { 
    // animation code 
}, completion: { (finished) in 
    // completion code 
}) 

あなたの用法は、単にパラメータの周りに括弧を省略し、それが改行を残します。それらを追加すると、コードが明確になります。

+0

ありがとうございます。 「in」という単語が何をするのか、それとも単にパラメータ名であるのかを理解したいのであれば、何を検索すればよいでしょうか? –

+1

[Closures](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94)の章をお読みください。 [The Swift Programming Language](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097-CH3-ID0)を参照してください。 'in'は構文の一部です。 – rmaddy

関連する問題