swift Archive

[Swift] ทำการ validate ข้อมูลด้วยแนวคิดของ Composite pattern

วันนี้ทำการ review code ของ iOS app ที่พัฒนาด้วยภาษา Swift พบว่ามีส่วนการ validate หรือตรวจสอบข้อมูลจำนวนมาก และรูปแบบ code ที่เขียนบ่อย ๆ เป็นดังนี้ ค่าต้องไม่ว่าง ข้อมูลต้องมีรูปแบบที่ถูกต้องเช่น email , ความยาวของข้อมูล, เป็นตัวเลข เป็นต้น ข้อมูลของ password ซึ่งต้องมีทั้งตัวเลข ตัวพิมพ์เล็กและพิมพ์ใหญ่ และอื่น ๆ อีกมากมาย คำถามก็คือ code ที่เขียนเป็นอย่างไร ? คำตอบก็คือ if-else-if-else ไปเรื่อย ๆ ไงล่ะ !!

Read More…

ว่าด้วยเรื่อง Protocol Oriented Programming (POP) ของภาษา Swift

ในภาษา Swift นั้นพยายามแก้ไขปัญหาต่าง ๆ ที่มากับ Object Oriented Programming (OOP) โดยการนำแนวคิด Protocol Oriented Programming (POP) มาใช้งาน ซึ่งถูกแนะนำครั้งแรกในงาน WWDC 2015 แน่นอนว่ามันทำให้การเขียนโปรแกรมด้วยภาษา Swift เปลี่ยนไป แถมยังง่ายและสนุกขึ้นอีกด้วย มาดูกันนิดหน่อยว่า นำไปใช้ในการพัฒนาระบบอย่างไรบ้าง

Read More…

แก้ไขปัญหาเรื่อง Callback hell ใน Swift กันนิดหน่อย

วันนี้ทำการ review code ทั้งฝั่ง Android และ iOS(Swift) พบว่า code มีสิ่งที่คล้ายกันมาก ๆ คือ มีการเรียกใช้ REST API ผ่าน network library ซึ่งทำงานแบบ Asynchronous สิ่งที่เกิดขึ้นคือ มี feature ที่ต้องเรียกใช้งาน REST API หลาย ๆ ตัวต่อเนื่องกัน ทำให้เกิด code ในรูปแบบของ Callback ซ้อน Callback หรือ Callback hell นั่นเอง หรือดีขึ้นมาหน่อยคือ flow การทำงานของ code กระโดดไปยัง method อื่น ๆ ต่อไปเป็นทอด ๆ หรือ Chain

Read More…

วิเคราะห์ code ภาษา Swift ด้วย SonarQube

ว่าง ๆ ช่วงฝนตกมานั่งวิเคราะห์ code ของภาษา Swift ด้วย SonarQube กันหน่อย ถ้าไปดูใน SonarQube จะพบว่ามี plugin ให้ใช้แล้ว แต่ว่ามันเป็น commercial หรือเสียเงินนั่นเอง ดังนั้นจึงไปลองหาของฟรีและไปพบกับ Sonar Swift จึงนำมาทดลองใช้กันหน่อย

Read More…

[Refactoring code] ว่าด้วยเรื่อง Creation Method

เนื่องจากทำการ review code ของระบบที่พัฒนาด้วยภาษา Swift แล้วพบว่าการสร้าง object บางตัวนั้น สามารถสร้างได้หลายแบบ ทำให้มี constructor จำนวนมาก !! ซึ่งมันเป็น Code Smell อย่างหนึ่ง ดังนั้นได้เวลาปรับปรุง code ให้ดีขึ้นแล้วนะ

Read More…

[Bug] Xcode 7.3 + Swift 2.3 มัน build นานมาก ๆ

เนื่องจากทำการเตรียมข้อมูลสำหรับการทำสอบ iOS app นิดหน่อย ซึ่งเตรียมข้อมูลในรูปแบบ dictionary แต่ดันเจอปัญหาการ build ช้ามาก ๆ ใน XCode 7.3 (Swift 2.3) !! โดยไร้สาเหตุ ตัวอย่าง code จาก Swift literal parsing bug แสดงผลการทำงานดังรูป (รอกันต่อไป build นานมาก ๆ) เมื่อไปดูใน web ก็พบว่ามันคือ Bug ของภาษา Swift นั่นเอง อยู่ใน SR-305 ซึ่งถูกแก้ไขไปแล้ว ซึ่งจะอยู่ใน Swift 3 !!

Read More…

XCode :: ทำการ Inject Object จาก Storyboard กัน

เนื่องจากมีโอกาสได้แบ่งปันเรื่อง MVP pattern ให้ทีมนิดหน่อย (แบบไม่ตั้งใจ) ซึ่งมีเรื่องหนึ่งที่ติดค้างไว้ก็คือ การ Inject Object จาก Storyboard ไปเลย จะได้ไม่ต้องมาสร้าง object ขึ้นมาใน ViewController เอง ทำให้การเขียน code ง่าย และ สะดวกขึ้น

Read More…

แนะนำการใช้งาน SwiftLint เพื่อตรวจสอบ code

วันนี้ Swift developer ทำการตรวจสอบรูปแบบของ source code กันหรือไม่ ? มีข้อตกลงในการเขียน code ( Code convention ) หรือไม่ ? ถ้ายังไม่มีขอแนะนำ SwiftLint ซึ่งจะช่วยเหลือเรื่องดังกล่าวอย่างมาก โดยอ้างอิงรูปแบบจาก Swift style guide ดังนั้นมาดูการใช้งานกันนิดหน่อย

Read More…

เมื่อ MVC ย่อมาจาก Massive ViewController

เมื่อวานนั่งดู Code การพัฒนา iOS ด้วยภาษา Swift โจทย์เดียวกันจาก developer 4 คน แต่โครงสร้างของ code ที่ออกมานั้นเหมือนกัน นั่นคือเป็น MVC(Model View Controller) ในรูปแบบของ Apple ซึ่งส่วนใหญ่จะนำไปสู่ MVC ที่ย่อมาจาก Massive ViewController มากกว่านะ !! และนั่นคือความหายนะที่กำลังมาเยือนนักพัฒนาโดยทั้งรู้และไม่รู้ตัว

Read More…

ว่าด้วยเรื่องของ Delegator และ Callback ใน Swift

วันนี้นั่งดูและเขียน code ด้วยภาษา Swift สำหรับพัฒนา iOS app พบว่าในหลาย ๆ ส่วนการทำงานใช้ Delegate pattern เพื่อเชื่อมต่อการทำงานในแต่ละส่วน เช่น User Interface Data model Networking layer Service layer Helper class มีเป้าหมายเพื่อไม่ให้ code ผูกติดกันมากจนเกินไป หรือ เรียกว่า Loose coupling แต่ละส่วนแยกกันทำงานชัดเจน แต่ทำให้ code ที่พัฒนาด้วยภาษา Swift เต็มไปด้วย protocol !! คำถามที่น่าสนใจคือ มันมีวิธีการอื่นที่ดีกว่านี้ไหม

Read More…