关闭

闭包คือ功能ที่ไม่ต้องประกาศชื่อ功能ไม่ต้องมี关键字Funcนำหน้า……..เพื่อนๆอาจเกิดคำถามว่าเพื่ออะไร? Functionาๆงั้นเรามาดูต่อกันว่าไอเจ้า功能พิลิกกึกกือแบบนี้เราจะใช้มันในสถานการณ์แบบไหนได้บ้าง

闭包จะใช้ในกรณีที่เราอยากส่ง函数ไปเป็น参数ของอีกFunctionหรือให้函数。 Returnาร返回函数ออกมา…ยิ่งพูดยิ่งงงมาลองดูตัวอย่างกันดีกว่า

复仇者联盟3英雄级别英雄级别英雄级别英雄级别

 英雄级{ 
 在里面() 
{
打印(“我是英雄”)
}
  funcpunch() 
{
打印(“我可以打孔”)
}
  funk kick() 
{
打印(“我可以踢”)
}
  } 

งใช้องใช้Heroของเรากันดู

  let ironMan = Hero()//我是英雄 
ironMan.punch()//我可以打孔
ironMan.kick()//我可以踢

จะให้ราวนี้เราจะให้Heroของเราสามารถเรนยนรู้สกิลใหม่ๆมาใช้งานได้เช่นน,ยิงจรวด,ยิงเลเซอร์,หายตัว,เปิดเกราะกำบัง…。 สกิลอีกมากมายนับร้อยสกิล………..อืม…มีสกิลมากมาย….. าเป็น绿巨人ก็ไม่จำเป็นต้องบินได้แปลว่าในแต่ละHero。 ังไงดีกักักักักัๆกแบบคลๆ

งาลองทำกันเริ่มจากสร้าง关闭技能ต่างๆไว้ดังนี้

  var fly:()->()= {()in print(“ i can fly”)} 
  var fireRocket:()->()= {()in print(“ Locktarget-> Fire the rocker-> Boom!”)} 

เพิ่ม功能使用技巧ใน类英雄ของเรา

 英雄级{ 
 在里面() 
{
打印(“我是英雄”)
}
  funcpunch() 
{
打印(“我可以打孔”)
}
  funk kick() 
{
打印(“我可以踢”)
}
  func useSkill(技能:()->()) 
{
技能()
}
  } 
  let ironMan = Hero()//我是英雄 
ironMan.punch()//我可以打孔
ironMan.kick()//我可以踢
ironMan.useSkill(技能:飞行)//我可以飞行
ironMan.useSkill(技能:fireRocket)// Locktarget-> Fire the rocker-> Boom!

จะเห็นว่า功能useSkillที่เพิ่มเข้ามานั้นมีหน้าที่เพียงแค่รับค่า技能มาแล้วใช้เท่านั้นเองซึ่งจริงๆแล้วก็คือการส่งFunctionไปเป็น参数ให้อีกFunctionหนึ่งเรียกใช้นกใช้นั้นเอเอง…..ซึ่งถ้าใครเห็น语法ของ关闭แล้วงงๆแล้วงงๆรามาต่อกันเลยครับ

句法

  var fly2:字符串=“我可以飞” 

ตัวแปลาเราสร้างตัวแปลใดๆก็จะประกอบไปด้วยชื่อตัวแปล,ชนิดตัวแปล,ค่าของตัวแปลดังรูป

Stringราจำเป็นต้องระบุค่าของตัวแปลให้ตรงกับชนิดที่เรากำหนดซึ่งในตัวอย่างด้านล่างนี้เรากำหนดชนิดนิดนStringแต่ใส่ค่า4ซึ่งเป็นชนิดIntก็จะเกิดErrorทันที(ชนิดสัมพันธ์กับค่า)

  var fly2:String = 4 //错误 

sure语法ดังนี้

  ()->() 

วงเล็บที่สรกคือที่ใช้กำหนที่ใช้กำหนด参数วงเล็บที่สองใช้กำหนดค่าที่จะ返回

  ()->()//ไม่รับค่า参数และไม่Returnอะไร 
(Int)->()//参数参数เป็นIntและไม่Returnอและไม่ร
(Int,Int)->()//รับค่า参数เป็นIntสองค่าและไม่Returnอะไร
(Int,Int)->(Int)//返回参数เป็นIntสองค่าและReturn Int

งรงร้าและองClosureก็มีแค่(块参数)และ(块返回语句)านี้หละครับง่ายๆทีนี้มาลองใส่ค่าให้แต่ละตัวแปลกัน

  var a:()->()= {()in} 
var b:(Int)->()= {{}
var c:(Int,Int)->()= {在{(number1,number2)中
var d:(Int,Int)->(Int)= {(返回number1 + number2中的(number1,number2)}

Synราขน语法ของตัว闭包ชัดเจนแล้วนะครับ。

  {(在返回语句中的参数)} 

ยาวไปมาลดรูปกัน

การที่เราประกาศตัวแปลแล้วระบุค่าให้เลยก็จะเป็นการประกาศชนิดตัวแปลไปในตัวทันทีดังตัวนทีดังตัวอย่างด้านล่างนี้

  var fly2:字符串=“我可以飞” 
var fly3 =“我可以飞”

Cloราะฉนั้น关闭ก็แบบเดียวกัน

  var a:()->()= {()in} 
var b:(Int)->()= {{}
var c:(Int,Int)->()= {在{(number1,number2)中
var d:(Int,Int)->(Int)= {(返回number1 + number2中的(number1,number2)}

  var a = {()in} 
var b = {(}中的(int:Int)
var c = {(}中的(number1:Int,number2:Int)
var d = {(number1:Int,number2:Int)返回number1 + number2}

าตรง返回陈述มีบรรทัดเดียวเราสามารมตัด关键字Returnออกได้

  var d = {{number1:Int,number2:Int)in number1 + number2} 

sureรจบเท่องการลดรูปClosureจบเท่านี้ก็น่าจะกำลังดีไม่งงแต่แถมอีกแบบเพราะเราจะเจอกับมันบ่อยคือการประกาศชนิดก่อนิดก่รูปด้านในClosureแบบนี้

  var d:(Int,Int)-> Int = {$ 0 + $ 1} 
var e:(Int,Int,Int)-> Int = {$ 0 + $ 1 + $ 3}

封闭式เป็น参考类型

  var sayHello =“大家好” 
  var thanos = {()在 
打印(sayHello)
}
  thanos()//大家好 
  sayHello =“我会杀了你” 
  thanos()//我会杀了你 

闭店闭店储值ไหนให้ใช้捕获列表แบบนี้ครับ

  var sayHello =“大家好” 
  var thanos = {[sayHello]()在 
打印(sayHello)
}
  thanos()//大家好 
  sayHello =“我会杀了你” 
  thanos()//大家好 

Cloรามักจะเห็นClousreนำไปใช้งานบ่อยๆก็พวกการทำ完成手กันใช้มั้ยครับงั้นวันนี้เรามาลองทำกันดู

งทำ完成ลกัน

  func avengersLogin(completion:(Bool)->()){ 
 为_ in 1 ... 100 
{
打印(“处理中”)
}
 完成度(true) 
  } 

เสร็จแล้วลองเรียกใช้ดูดังนี้

  avengersLogin(完成:{成功 
 如果成功==真 
{
打印(“登录成功,您是英雄”)
}
  }) 

completionนช่อง参数完成เราก็โยน闭包เข้าไปตรงๆแบบนี้ก็ได้

  {()in()} //ถ้าใครงงยังจำก​​ันได้เนอะ 

ังไม่จบ

จะจบาจะจบ博客ละนึกขึ้นได้ยังมี闭包环ll clo

拖网状群

กราอามารถลากClosureออกมาจากFunctionเพื่อให้ดูง่ายๆดังนี้

  avengersLogin(){如果成功,则成功== true {/ *做某事* /}} 

งาวงเล็บปิดของ函数ปิดไปแล้วนะครับแต่เราเอา完成闭包มาต่อท้ายเฉยๆแบบนี้เลยก็ได้

สรุป

Cloนนี้เราได้เรียนรู้วิธีใช้งาน封闭สรู้ว่าทำไมเราถึงใช้封闭สรุปสั้นๆแบบนี้หละครับฮ่าๆ

ใหม่อกันใหม่博客หน้าครับขอบคุณทุกคนที่มาอ่านด้วยนะครับ