Guest User

Untitled

a guest
Oct 17th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. ////closureの使い方
  2. //クロージャとは変数に代入された関数
  3.  
  4. //関数とクロージャー同じことができる
  5. func clo(){
  6. print("Hello world")
  7. }
  8. var clo2 = {print("Hello world")}
  9. var clo3:() -> (Void) = {
  10. print("Hello world")
  11. }
  12.  
  13. clo()
  14. clo2()
  15. clo3()
  16.  
  17. //============================
  18.  
  19. //関数とクロージャー同じことができる(引数、戻り値あり)
  20. func doya(num:Int) -> Int{
  21. return num * 10
  22. }
  23.  
  24. var doya2:(Int) -> Int = { (num) in
  25. return num * 10
  26. }
  27.  
  28. var doya3:(Int,Int) -> Int
  29. doya3 = { (num,num2) in
  30. return num * num2
  31. }
  32.  
  33. doya(num:3)
  34. doya2(3)
  35. doya3(4,5)
  36.  
  37. //============================
  38. //closureを引数、戻り値として扱う関数
  39. func cloc(clo:(Int) -> Int) -> (Int) -> Int{
  40. let tehe = clo(3)
  41. return { (num) in return num * tehe }
  42. }
  43.  
  44. let t = cloc(clo:doya2)(5)
  45.  
  46.  
  47. func cloc2(clo:(Int) -> Int) -> String{
  48. let tehe = clo(3)
  49. return "ふーん:\(tehe)"
  50. }
  51.  
  52. cloc2(clo: doya2)
  53. //============================
  54.  
  55. //エイリアス
  56. typealias hoho = (Int) -> Int
  57.  
  58. //============================
  59. //引数に結果となるclosureを入れておくという考え方
  60. //APIのなど非同期処理でよく使われる。
  61. //結果が出たら、登録してあるクロージャーを実行する
  62. func trailClo(num:Int,completion:(Int) -> Void){
  63. let num2 = num * 3
  64. completion(num2)
  65. }
  66.  
  67. //closureを登録しておく
  68. trailClo(num: 4, completion: { num3 in
  69. print(num3)
  70. })
  71.  
  72. //最後のclosureを外にだして登録しておくこともできる
  73. trailClo(num:5){ num4 in
  74. print(num4)
  75. }
Add Comment
Please, Sign In to add comment