Cell Registration & Dequeuing with Swift Features

ถ้าบอกว่าคลาสใน UIKit ตัวไหน ที่เราใช้กันบ่อยมากที่สุด ก็คงจะหนีไม่พ้น UITableView และ UICollectionView นั่นแหละนะ และงานที่เราต้องทำกันบ่อยๆ นอกเหนือจากการ Custom Cell ให้เป็นรูปแบบที่เราต้องการ ถ้า Cell ที่เราสร้างขึ้นอาจจะมีการนำมาใช้ใหม่ สิ่งที่เราต้องทำคือ สร้าง XIB file ขึ้นมาและก็ต้อง Register ให้รู้ด้วยว่าจะมี Cell อีกรูปแบบเข้ามาในระบบ


คราวนี้มาดูเวลาเราเขียนโค้ดแบบปกติกันก่อน ว่าที่ผ่านมา ผมและหลายๆ คนทำกันยังไง เริ่มจาก UITableView และ UICollectionView นั้นมี API ที่เอาไว้ให้เรา Register Cell ดังนี้


Wait for the Code ....

และวิธีการเขียน Datasource โดยทั่วไปก็จะเขียนกันแบบนี้ โดยอ้างถึง Reuse Identifier ด้วยค่าคงที่ที่ประกาศไว้ด้านบน


Wait for the Code ....

คราวนี้เราจะมาลองดูกันว่า เราจะทำให้โค้ดชุดนี้เรียบง่าย และปลอดภัยขึ้นได้อย่างไร
ด้วยการใช้ Feature ของ Swift นั่นคือ Generics และ Protocol Extension
เริ่มจาก ปกติแล้วผมก็จะตั้ง Reuse Identifier ตามชื่อ Cell Class (Nib File) นั่นแหละ เช่น Class ชื่อ BookCell ก็ตั้งว่า BookCell 

ในเมื่อถ้าเป็นแบบนั้นเราก็เลยสร้าง Protocol ให้กับ UIView Class ขึ้นมาชื่อว่า ReuseableView และเขียนแบบนี้ซะเลย 


Wait for the Code ....

คราวนี้เมื่อเราต้องการใช้ Reuse Identifier เราก็แค่เรียกใช้แบบนี้


Wait for the Code ....

ต่อไปเป็นเรื่องของ Nib ซึ่งเราจะสร้าง Protocol เช่นกันชื่อว่า NibLoadableView ซึ่งจะทำหน้าที่ส่งชื่อของ Nib กลับมาให้เรา


Wait for the Code ....

คล้ายกันกับด้านบน เราก็จะสามารถเข้าถึงชื่อของ Nib ได้โดยหลีกเลี่ยงการใช้ Magic String


Wait for the Code ....

ถ้าใช้ชื่อที่ต่างไปจากที่ Xcode ให้มา ก็ต้องไปจัดการที่ nibName ที่เราสร้างขึ้นมา
หลังจากที่สร้าง 2 Protocol ด้านบนแล้ว เราก็จะมาใช้ประโยชน์จาก Swift Generics เพื่อเขียนฟังก์ชั่น Registration และ Dequeuingให้ดูง่ายขึ้นกัน


Wait for the Code ....

คราวนี้มาโค้ดผลลัพธ์ที่เราต้องเขียนหลังจากที่เราใช้ประโยชน์จาก Protocol Extensions และ Generics บนภาษา Swift กัน


Wait for the Code ....

ลองเอาไปใช้ดูนะครับ ผมอ่านเจอมาจาก Blog ของคุณ Guille Gonzales
แล้วมันดูดีมากเลย ว่าจะเอาไปประยุกต์ใช้กับโค้ดของตัวเองเหมือนกัน

Comments

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

Command Line Compiling C/C++ ,Java [Windows, Mac]

การเขียนโปรแกรมแก้ปัญหา "โจทย์รูปทรงสมมาตร"