与えられた:
typealias Action = () -> ()
var action: Action = { }
func doStuff(stuff: String, completion: @escaping Action) {
print(stuff)
action = completion
completion()
}
func doStuffAgain() {
print("again")
action()
}
doStuff(stuff: "do stuff") {
print("swift 3!")
}
doStuffAgain()
作るためにどのような方法があるcompletion
パラメータは、(とaction
)タイプのAction?
とも続けますか@escaping
?
タイプを変更すると、次のエラーが発生します。
@escaping属性は関数型にのみ適用されます
@escaping
属性を削除すると、コードはコンパイルされて実行されますが、completion
クロージャーが関数のスコープをエスケープしているため、正しくないようです。
@escaping
属性を削除すると、コードがコンパイルされて実行されます」-SR-2444で説明されているようにAction?
、デフォルトではエスケープしているためです。したがって、@escaping
オプションのクロージャーを使用するときに削除することで、必要なものが完成します。