Posts

Showing posts with the label closure

How Do I Declare A Block in Objective-C?

Image
As a Local Variable returnType (^ blockName )( parameters ) = ^ returnType ( parameters ) { ... }; As a Property @property (copy, nonatomic) returnType (^ blockName )( parameters ); As a Method's parameters - (void)someMethodWithBlocks:( returnType (^)( parameters )) blockName ; As a Method's Arguments [self someMethodWithBlock:^ returnType ( parameters ) { ... }]; As a typedef typedef returnType (^ TypeName )( parametersTypes ); TypeName blockName = ^ returnType ( parameters ) { ... };

Continuation Passing Style in Swift

Image
ก่อนอื่นเลย เราอยากบอกว่า Apple ไม่ชอบท่าดัก Exception เท่าไหร่ แม้จะมี try / catch / finally ให้ใช้ แต่ดูได้เลย ไม่มีใครเขียนเป็น Production Code กันเลย (ในประสบการณ์ที่ผมเห็นโค้ดมาน่ะนะ) โดยในการทำ Error Handling บน Objective-C นั้นท่าที่เราเจอประจำคือการใช้ NSError ส่วนใน Swift นั้นจะตัดการทำ Throw Exception ออกไปเลย (ยกเว้นการทำ assert() ยังคงมีให้ใช้อยู่) และการใช้ NSError ก็คล้ายกันกับใน Objective-C นั่นแหละ แบบนี้ คราวนี้ใน Swift นั้นมีอีกทางเลือกหนึ่งที่ดูดีกว่า (หรือปล่าว ?) นั่นคือการใช้ Tuples เข้ามาช่วยให้เราส่งค่าหลายๆ ค่าออกมาจาก Function พร้อมๆ กัน แบบนี้ ลองชั่งใจกันเองครับ ว่าท่าไหนสวยกว่า... แต่เคยมีการ Discuss กันใน Facebook ของบรรดาคนในวงการมาตั้งคำถาม (ซึ่งผมหาไม่เจอแล้ว) มีอาจารย์ท่านนึงตอบได้น่าสนใจมากว่า (ผมก็พยายามนึกเอาล่ะนะ ไม่เป๊ะหรอก) การส่ง Error กลับไปด้วยการทำ Pass by reference นั้นถูกเขียนด้วยความเข้าใจที่ว่า "ฟังก์ชั่นควรส่งค่าอะไรกลับ" ซึ่งในที่นี้ชื่อฟังก์ชั่นบอกเราว่าจะต้องได้ Data กลับมา ดังนั้นเราจะมอง E...

Intermediate Swift

Image
จากที่เขียนเรื่อง Basic ไปเมื่อคราวที่แล้ว ( http://www.macbaszii.com/2014/06/introduction-to-swift.html ) คราวนี้มาเรื่องที่ยากขึ้นหน่อยแล้วกันเนอะ โดยบาง Feature ของภาษา Swift บางอย่างก็จะมีอยู่แล้วใน Objective-C แต่ทำให้ดูน่ารัก น่าใช้ขึ้นอีกหน่อย Optionals เคยไหม ? ฟังก์ชั่นสักตัวที่ให้ค่ากลับมาเป็นผลลัพธ์ หรือบางทีก็ไม่ (nothing value) เรามักจะแยกประเภทเวลาที่ฟังก์ชั่นส่งค่าที่สื่อถึงการไม่มีค่ากลับมา เช่นถ้าเป็น NSRange ก็จะส่ง NSNotFound กลับมา อะไรที่เกี่ยวกับ Index เช่นการหาข้อมูลบางอย่างใน Array ก็จะส่ง -1 หรือไม่ท่าพื้นฐานก็ส่ง nil กลับมาเลย ทำให้ต้องไปดู Protocol ของฟังก์ชั่นที่ใช้ แล้วเช็คเงื่อนไขให้ถูกต้องนั่นแหละ แต่ใน Swift มีแนวคิดของการใช้ Optionals ตอนนี้เรามี " nothing value หรือปล่าว ?" ให้ใช้กันแล้ว เพียงแค่เติม ? ต่อท้ายไปเท่านั้นเอง มาดูตัวอย่างโค้ดนี้กัน จากตัวอย่าง Property Car ใน Person Class เป็น Optional นั่นหมายความ "คนอาจจะมี หรือไม่มีรถก็ได้" โดยเราจะไม่สามารถเข้าถึง Property ที่เป็น Optional ได้โดยตรงจะต้องทำสิ่งที่เ...