15 เคล็ดลับ เพื่อปรับปรุง Swift Code ให้ดีขึ้น

19-พ.ย.-19

คัมภีร์เทพ IT

ในบทความนี้ คุณ Gavin Shrader ได้รวบรวม 15 เคล็ดลับ เพื่อปรับปรุง Swift Code ของคุณให้ดีขึ้น และเป็นเคล็บลับที่เน้นไปที่การใช้สำหรับการสร้าง iOS Applications เชื่อว่าจะเป็นประโยชน์สำหรับ Developer ที่จะนำไปใช้ประยุกต์ใช้ในการทำงานจริงให้รวดเร็วและมีประสิทธิภาพมากขึ้น

1. Optional Unwrapping

คุณสามารถ Unwrap Optional Variables และจัดการกับ Failure ทั้งหมดได้ในบรรทัดเดียวด้วย Option2

ถ้าค่า Optional ทั้ง 2 ไม่มีค่า Nil, Option 2 จะดำเนินการในส่วนที่เรา Comment ไว้ ถ้ามีหนึ่งในตัวแปรเป็น Nil เราจะ “Return” และออกจาก Scope ของ Function

2. Ternary Operators

มันจะช่วยกระชับ Conditional Logic ให้อยู่ในบรรทัดเดียวด้วย Operators ที่มีประโยชน์เหล่านี้ 

คุณสามารถใช้ Operators เหล่านี้ซ้อน ๆ กัน (Nested) ได้เพื่อความสั้นกระชับ

3. Generics

Generic Programming ซึ่งถูกนิยามขึ้นโดย Google เป็น Method สำหรับเขียน Function และ Data Types ในขณะที่ตั้งสมมติฐานที่น้อยที่สุดเกี่ยวกับประเภทของข้อมูลที่ถูกใช้งานอยู่

การใช้ Generics จะช่วยให้ Abstractions ที่สร้าง Code ที่ Clean ขึ้นพร้อมกับ Bugs ที่น้อยลง

อย่างที่คุณเห็น ด้วยการเลือก Option 2 เราจะสามารถเขียนหนึ่ง Function ที่สามารถจัดการกับ Input ที่แตกต่างกันหลายประเภทได้

4. สร้าง UIColor ด้วย Hex Code

ให้สร้าง File ที่ชื่อว่า UIColor+Extensions.swift ที่มี Code ดังต่อไปนี้:

เพียงเท่านี้ คุณก็สามารถสร้างสี ได้ด้วย Hex Code ดังตัวอย่างด้านล่างนี้:

5. การใช้ Extensions

แนะนำให้สร้าง File ที่ Extends Class ที่คุณใช้งานซ้ำ ๆ บ่อย ๆ

ในกรณีนี้ เราจะเลือก UIButton เพื่อแสดงให้เห็นถึงการเพิ่ม Press Function แบบกำหนดเอง

ตอนนี้ ทุกที่ที่เราเพิ่ม UIButton เข้าไป เราจะสามารถเรียกใช้ Press Function เพื่อเลียนแบบ Scale-in และ Scale-out Animation ดังตัวอย่างด้านล่างนี้ได้:

6. รวบใช้งานหลาย Back-End/Function Calls ใน Class เดียว

ลองนึกภาพว่าคุณมี Function ที่คุณต้องเรียกใช้ภายใน Application ของคุณ เพื่อทำการ Update ข้อมูล ดังนี้:

ในตัวอย่างนี้ FAB เป็นสัญลักษณ์ของ Google Firebase ตอนนี้ให้ลองจินตนาการว่า เราต้องการดึง Firebase ออก และแทนที่ด้วย Back end ทางเลือกอื่น เคล็ดลับนี้จะทำให้สถานการณ์นั้นง่ายและรวดเร็ว

เมื่อคุณกำลังเขียน Code แล้วพบว่าตัวคุณเองทำการเรียกใช้ Function เดิม ๆ หลายครั้งใน Application ของคุณ ขอแนะนำให้สร้าง Class ที่ “รวบ” การเรียกใช้งานของคุณลงในหนึ่ง Function

ตัวอย่างเช่น

ใน Option 1 ถ้าเราต้องการแทนที่ Firebase เราจะต้องแลกเปลี่ยนด้วยการเรียกใช้ Function ถึง 3 ครั้ง ใน Option 2 เราเพียงแค่ Update Network Class ของเราเท่านั้น

7. guard let

การใช้คำสั่ง guard มีประโยชน์มากกว่าแค่การ Unwrap Optionals คุณสามารถใช้คำสั่งเหล่านี้เพื่อตรวจสอบความถูกต้องของเงื่อนไขเพื่อถ่ายโอนการควบคุม Program ที่อยู่นอก Scope ของเงื่อนไขบางอย่าง

ตัวอย่างเช่น

 

8. Loops

คุณสามารถใช้งาน Loop ได้หลายรูปแบบ ซึ่งถือเป็นเรื่องพื้นฐานของการเขียน Code อยู่แล้ว

9. ใช้ Enumerations เพื่อให้แน่ใจว่า Switch Statements/ Categories ของ Items ต่าง ๆ เป็นแบบ Type-Safe

ใน Option 1 มีความเป็นไปได้ว่าเราอาจป้อน String ที่ไม่เหมาะสมลงในคำสั่ง Switch ของเรา ดังนั้น ทำให้มีการ Set ค่าที่ไม่เหมาะสมสำหรับ Market Share ของเรา

ใน Option 2 เราได้บังคับให้คำสั่ง Switch นี้เป็นเป็นแบบ Type-Safe ทำให้เป็นไปไม่ได้ที่จะใส่ค่าที่ไม่ถูกต้อง

10. ใช้ Callbacks เพื่อส่ง Completion Handler

ดังที่คุณเห็นจาก Option 1 และ Option 2 เราสามารถส่งการแจ้งเตือนเมื่อเสร็จสิ้น Action แล้ว (ไม่ว่าจะเป็น animation, network call และอื่น ๆ) หรือเราสามารถส่งการแจ้งเตือนพร้อมข้อมูลก็ได้

11. มีการ Default Value ที่ยอดเยี่ยม

ในตัวอย่างนี้เราเห็น 2 Option สำหรับการ Set ค่าของตัวแปร ซึ่งขึ้นอยู่กับว่า Input ของ User เป็น Nil หรือไม่

12. เก็บ Universal Constants ภายใน File เดียวเพื่อง่ายต่อการเข้าถึง

คณสามารถเก็บค่า Static Constants ของคุณไว้ใน File เดียวเพื่อความสะดวกในการใช้งาน ดังตัวอย่างนี้

และนี่ก็เป็นตัวอย่างการใช้งานสี:

 

13. Automatic Reference Counting (ARC)

ขอแนะนำให้คุณอ่าน Official Swift Documentation เกี่ยวกับ ARC (Automatic Reference Counting) ด้วย

ARC ถูกใช้โดย Swift เพื่อติดตามและจัดการกับ Memory มีหลายสถานการณ์ที่สิ่งนี้ถือเป็นสิ่งสำคัญที่ต้องคำนึงถึงใน Application ของคุณ

คำแนะนำสั้น ๆ ว่า ARC จะสามารถส่งผลต่อการ de-initializing object ได้อย่างไร

ลองนึกภาพว่า เรามี Class นี้อยู่ ซึ่งคือ Person:

ต่อไป เราจะสร้างตัวแปรขึ้นมา 3 ตัว เนื่องจากตัวแปรทั้ง 3 นี้ เป็น Optionals ซึ่งพวกมันจะถูก Initialized ด้วยค่า Nil:

ต่อไป เราจะสร้าง Person Instance ใหม่ และ Assign ให้กับ ref1

 

จากนั้น เราจะ Assign ref2 และ ref3 เป็นการอ้างอิง (References) ไปยัง Person Object เดียวกันของเรา:

ตอนนี้ การอ้างอิงทั้ง 3 ชี้ไปที่ Person Object เดียวกัน เราสามารถ Set การอ้างอิง 2 รายการแรกให้เป็น Nil และยังคงเก็บ Person Object ของเราไว้ใน Memory ดังนี้

ในที่สุด เมื่อต้องการ de-initialize Person Object ของเรา ให้ Set ค่า ref3 ให้เป็น Nil:

 

14. สามารถ Default Arguments สำหรับ Function Parameters

มันค่อนข้างตรงไปตรงมามาก สามารถกำหนดค่า Default สำหรับ Input Parameters ของคุณ

​15. Encode/Decode Struct จาก Memory ผ่าน UserDefaults

File นี้ จะแสดงให้เห็นถึง Feature ที่มีประโยชน์มาก

จากด้านบน เรามี Struct ที่ชื่อว่า TaskItem ที่มีคุณสมบัติดังที่เห็นใน Codable ซึ่งการมีคุณสมบัติแบบนี้จะช่วยให้เราสามารถ Encode/Decode Struct นี้ ผ่าน Serialized Format (อย่าง JSON)

จากนั้น คุณจะเห็นภายใน Function retrieveData() ว่าเรากำลังใช้คำสั่ง guard และคำสั่ง if let เพื่อตรวจสอบว่า UserDefaults เก็บ Array ที่มีอยู่แล้วของ TaskItems หรือไม่

หากไม่มี Array ดังกล่าว เราจะทำการสร้าง Array ใหม่ดังที่เต็มไปด้วย Items ดังที่กล่าวไปก่อนหน้านี้

ที่ด้านล่างของ File นี้ จะแสดงให้เห็นถึงวิธีที่คุณจะสามารถ Encode Array ที่มีอยู่ ของ Codable Items ไปยัง Memory ผ่าน PropertyListEncoder ซึ่งเป็น Dictionary Key และ Optional Try Block

การใช้งานหลัก ๆ สำหรับ File นี้ จะ Run ในช่วงเริ่มต้นของ Application และในช่วงนี้ เราจะตรวจสอบ Array ที่มีมาก่อนของ Items ที่เราต้องการจัดเก็บ หากไม่มี Array นี้ เราสามารถเติม Array ของ Items ของเราล่วงหน้า แล้วบันทึกลงใน Memory เพื่อการ Recall ในภายหลัง

ที่มา:  https://medium.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด