ตอนที่ 3 สร้างแอพ iOS: SwiftUI คืออะไร

  1. ทำความเข้าใจกับ SwiftUI
  2. การสร้าง UI ด้วย SwiftUI
  3. SwiftUI กับ UIKit: ข้อดีและข้อเสีย
  4. การรวม SwiftUI เข้ากับโครงการ UIKit ที่มีอยู่
  5. การใช้แนวทางปฏิบัติที่ดีที่สุดของ SwiftUI
  6. การย้ายจาก UIKit ไปยัง SwiftUI

SwiftUI เป็นชุดเครื่องมือส่วนต่อประสานผู้ใช้ที่แปลกใหม่ซึ่งเปิดตัวโดย Apple ในปี 2019 ซึ่งช่วยให้นักพัฒนาสามารถสร้าง UI ที่ทันสมัยและประกาศได้โดยใช้โค้ด Swift ในฐานะทางเลือกที่ทรงพลังสำหรับ UIKit SwiftUI นำเสนอวิธีใหม่ในการออกแบบและสร้างอินเทอร์เฟซผู้ใช้สำหรับ iOS, macOS, watchOS และ tvOS ในบทความนี้ เราจะเจาะลึกเกี่ยวกับ SwiftUI สำรวจฟีเจอร์ ประโยชน์ และวิธีการรวมเข้ากับทำแอพสร้างแอพ iOS UIKit ที่คุณมีอยู่

1. ทำความเข้าใจกับ SwiftUI

SwiftUI เป็นภาษาเฉพาะโดเมน (DSL) ที่สร้างขึ้นจาก Swift ทำให้คุณสามารถสร้าง UI โดยใช้โค้ด Swift เฟรมเวิร์กสร้างขึ้นจากแนวคิดของการเขียนโปรแกรมเชิงประกาศ ซึ่งคุณอธิบายลักษณะที่ปรากฏและลักษณะการทำงานของ UI แทนที่จะกำหนดแต่ละขั้นตอนอย่างชัดเจนในการสร้าง UI สิ่งนี้นำไปสู่โค้ดที่อ่านง่าย บำรุงรักษา และปรับขนาดได้ รวมถึงกระบวนการทำแอพสร้างแอพ iOSที่มีประสิทธิภาพมากขึ้น

2. การสร้าง UI ด้วย SwiftUI

หากต้องการเริ่มทำงานกับ SwiftUI คุณจะต้องการทำแอพสร้างแอพ iOS SwiftUI ใหม่หรืออัปเดตทำแอพสร้างแอพ iOS ที่มีอยู่ใน Xcode SwiftUI ใช้ชุดส่วนประกอบที่ปรับแต่งได้ที่เรียกว่า “views” ซึ่งคุณสามารถรวมเข้าด้วยกันเพื่อสร้าง UI ที่ซับซ้อนได้ มุมมองที่สำคัญบางประการ ได้แก่ :

  • Text: แสดงข้อความคงที่หรือไดนามิก
  • Image: แสดงรูปภาพจากแหล่งต่างๆ
  • Button: แสดงถึงองค์ประกอบการกระทำที่แตะได้
  • Toggle: ให้การควบคุมสวิตช์สำหรับค่าบูลีน
  • TextField: ยอมรับการป้อนข้อมูลของผู้ใช้ผ่านทางแป้นพิมพ์
  • List: แสดงรายการแบบเลื่อนของรายการ
  • VStack, HStack และ ZStack: จัดเรียงมุมมองในแนวตั้ง แนวนอน หรือเป็นเลเยอร์

3. SwiftUI กับ UIKit: ข้อดีและข้อเสีย

ก่อนที่จะดำดิ่งสู่ SwiftUI สิ่งสำคัญคือต้องเข้าใจข้อดีและข้อเสียเมื่อเทียบกับ UIKit:

ข้อดี:

  • ไวยากรณ์การประกาศ (Declarative syntax): SwiftUI ทำให้การพัฒนา UI ง่ายขึ้นด้วยโค้ดเบสที่อ่านง่ายขึ้นและบำรุงรักษาได้
  • ความเข้ากันได้ข้ามแพลตฟอร์ม (Cross-platform compatibility): SwiftUI ทำงานได้กับทุกแพลตฟอร์มของ Apple ทำให้สามารถใช้โค้ดซ้ำได้และมีความสอดคล้องกัน
  • การแสดงตัวอย่างแบบสด (Live Preview): การแสดงตัวอย่างตามเวลาจริงช่วยให้คุณเห็น UI ขณะที่คุณสร้าง เร่งการทำแอพสร้างแอพ iOS
  • อิงตาม Swift (Swift-based): SwiftUI ผสานรวมกับ Swift อย่างสมบูรณ์ ช่วยให้คุณใช้ประโยชน์จากคุณสมบัติและความสามารถของ Swift ได้

จุดด้อย:

  • ความเข้ากันได้แบบย้อนหลังที่จำกัด: SwiftUI ต้องใช้ iOS 13 หรือใหม่กว่า ซึ่งอาจไม่รวมผู้ใช้บางรายที่ใช้อุปกรณ์รุ่นเก่า
  • ชุมชนขนาดเล็กกว่า: เนื่องจากเป็นเฟรมเวิร์กที่ค่อนข้างใหม่ ชุมชนนักพัฒนาของ SwiftUI จึงมีขนาดเล็กกว่าของ UIKit ทำให้มีทรัพยากรและไลบรารีของบุคคลที่สามน้อยลง
  • ระยะเวลาการเรียนรู้: นักพัฒนาที่มีประสบการณ์ UIKit มากมายอาจต้องใช้เวลาสักพักเพื่อปรับให้เข้ากับแนวทางการประกาศของ SwiftUI

4. การรวม SwiftUI เข้ากับโครงการ UIKit ที่มีอยู่

หากคุณต้องการใช้ SwiftUI ในทำแอพสร้างแอพ iOS UIKit ที่คุณมีอยู่ คุณสามารถทำได้โดยทำตามขั้นตอนเหล่านี้:

  1. ตรวจสอบให้แน่ใจว่าโปรเจ็กต์ของคุณมีเป้าหมายเป็น iOS 13 หรือใหม่กว่า
  2. สร้างไฟล์ SwiftUI สำหรับมุมมองหรือส่วนประกอบใหม่ของคุณ
  3. ในโค้ด UIKit ของคุณ ให้นำเข้าSwiftUIเฟรมเวิร์ก
  4. ใช้UIHostingControllerเพื่อรวมมุมมอง SwiftUI เข้ากับลำดับชั้นมุมมองตาม UIKit ของคุณ UIHostingControllerเป็นคลาสย่อยUIViewControllerที่ทำหน้าที่เป็นสะพานเชื่อมระหว่าง UIKit และ SwiftUI

ตัวอย่าง:

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, SwiftUI!")
    }
}

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let hostingController = UIHostingController(rootView: ContentView())
        addChild(hostingController)
        hostingController.view.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(hostingController.view)
        
        NSLayoutConstraint.activate([
            hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
            hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])

        hostingController.didMove(toParent: self)
    }
}

5. การใช้แนวทางปฏิบัติที่ดีที่สุดของ SwiftUI

เมื่อทำงานกับ SwiftUI จำเป็นต้องปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดเพื่อเพิ่มประสิทธิภาพโค้ดของคุณและสร้าง UI ที่บำรุงรักษาได้:

  • ใช้@State, @Binding, @ObservedObjectและ@EnvironmentObjectตัวตัดคุณสมบัติเพื่อจัดการสถานะและโฟลว์ข้อมูลอย่างมีประสิทธิภาพ
  • แบ่ง UI ของคุณออกเป็นส่วนประกอบเล็กๆ ที่นำกลับมาใช้ใหม่ได้เพื่อส่งเสริมความเป็นโมดูลาร์และการนำโค้ดกลับมาใช้ใหม่
  • ใช้ประโยชน์จากการรองรับในตัวของ SwiftUI สำหรับคุณสมบัติการเข้าถึง เช่น Dynamic Type, VoiceOver และโหมดคอนทราสต์สูง
  • ทดสอบมุมมอง SwiftUI ของคุณโดยใช้เฟรมเวิร์ก XCTest และตัวให้บริการตัวอย่างในตัวของ SwiftUI

6. การย้ายจาก UIKit ไปยัง SwiftUI

แม้ว่า SwiftUI จะเป็นเฟรมเวิร์กที่น่าตื่นเต้นและทรงพลัง แต่การย้ายโปรเจ็กต์ UIKit ทั้งหมดไปยัง SwiftUI อาจเป็นการดำเนินการที่สำคัญ มักจะเป็นการดีกว่าที่จะปรับใช้ SwiftUI แบบค่อยเป็นค่อยไป โดยเริ่มจากคุณสมบัติหรือส่วนประกอบใหม่ ต่อไปนี้คือเคล็ดลับบางประการสำหรับกระบวนการโยกย้ายที่ราบรื่นยิ่งขึ้น:

  • ประเมินข้อกำหนดของทำแอพสร้างแอพ iOSของคุณและตัดสินใจว่าส่วนใดจะได้ประโยชน์สูงสุดจาก SwiftUI
  • ระบุส่วนประกอบ UIKit ที่สามารถแทนที่ได้อย่างง่ายดายด้วยสิ่งที่เทียบเท่ากับ SwiftUI
  • เริ่มต้นด้วยการผสานรวม SwiftUI เข้ากับส่วนต่างๆ ของแอปที่มีขนาดเล็กลง และค่อยๆ ขยายไปยังส่วนประกอบที่ซับซ้อนมากขึ้น
  • โปรดทราบว่าคุณสามารถรักษาแอปแบบไฮบริดที่มีส่วนประกอบทั้ง UIKit และ SwiftUI ไว้ได้ ช่วยให้คุณเปลี่ยนตามจังหวะของคุณเองได้

SwiftUI นำเสนอวิธีการที่ทันสมัยและชัดเจนในการสร้างอินเทอร์เฟซผู้ใช้ข้ามแพลตฟอร์มของ Apple SwiftUI เป็นเครื่องมือที่ทรงพลังสำหรับทำแอพสร้างแอพ iOS ด้วยไวยากรณ์ที่สะอาด การแสดงตัวอย่างแบบสด (Live Preview) และความเข้ากันได้ข้ามแพลตฟอร์ม ด้วยการทำความเข้าใจคุณลักษณะ ข้อดีข้อเสีย และกลยุทธ์การผสานรวม คุณสามารถรวม SwiftUI เข้ากับโปรเจ็กต์ที่มีอยู่หรือสร้างแอปที่ใช้ SwiftUI ใหม่ทั้งหมดได้อย่างมีประสิทธิภาพ โอบรับอนาคตของการพัฒนา UI และปลดล็อกศักยภาพทั้งหมดของ SwiftUI ในทำแอพสร้างแอพ iOS ของคุณ

สร้างแอพ iOS การเขียน App iOS

ตอนที่ 2 สร้างแอพ iOS: Interface Builder และ Storyboards คืออะไร
ตอนที่ 4 สร้างแอพ iOS: การนำทาง (Navigation) และการกำหนดเส้นทาง (Routing)