ตอนที่ 10 iOS Swift การทำงานร่วมกันกับ Objective-C

  1. การใช้คลาส Objective-C ใน Swift
  2. การใช้คลาส Swift ใน Objective-C
  3. การเชื่อมโยงส่วนหัว (Bridging headers) และการแปลงประเภท (type conversions)

ในโลกของการทำแอพ iOS Swift และ Objective-C เป็นสองภาษาโปรแกรมสำหรับรับทำแอพที่โดดเด่นซึ่งมีบทบาทสำคัญในการสร้างระบบนิเวศ ในขณะที่ตอนนี้ Swift เป็นภาษาที่การรับทำแอพเลือกใช้ แต่ยังคงมีโค้ดเดิมจำนวนมากอยู่ใน Objective-C สิ่งสำคัญคือต้องเข้าใจวิธีการใช้ภาษาเหล่านี้ให้สอดคล้องกันในโครงการเดียว ช่วยให้คุณใช้ประโยชน์จากทั้งสองโลกได้ดีที่สุด

บทความนี้จะกล่าวถึงวิธีการใช้คลาส Objective-C ใน Swift วิธีใช้คลาส Swift ใน Objective-C และวิธีการทำงานกับส่วนหัวของการเชื่อมโยงและการแปลงประเภทเพื่อให้สามารถทำงานร่วมกันได้อย่างราบรื่นระหว่างภาษาเหล่านี้

1. การใช้คลาส Objective-C ใน Swift

หากต้องการใช้คลาส Objective-C ใน Swift คุณต้องสร้างส่วนหัวของการเชื่อมโยงเพื่อนำเข้าส่วนหัวของ Objective-C ที่จำเป็น นี่คือวิธีที่คุณสามารถทำได้:

1.1 การสร้างส่วนหัวของการเชื่อมโยง

ส่วนหัวของการเชื่อมโยง (bridging header) คือไฟล์ที่เชื่อมต่อโค้ด Objective-C กับโค้ด Swift ของคุณ หากต้องการสร้างให้ทำตามขั้นตอนเหล่านี้:

  1. ในโครงการ Xcode ของคุณ ให้ไปที่ File > New > File
  2. เลือกเทมเพลต “Header File” ในส่วน iOS > Source แล้วคลิก “Next”
  3. ตั้งชื่อไฟล์ ” -Bridging-Header.h” แล้วคลิก “Create”
1.2 นำเข้าส่วนหัว Object-C

เมื่อคุณสร้างส่วนหัวของการเชื่อมโยงแล้ว คุณต้องนำเข้าส่วนหัวของ Objective-C ที่เกี่ยวข้องเพื่อทำให้คลาสพร้อมใช้งานใน Swift เพิ่มคำสั่งการนำเข้าต่อไปนี้ในไฟล์ส่วนหัวของการเชื่อมโยง:

#import "<YourObjectiveCClass>.h"
1.3 การใช้คลาส Objective-C ใน Swift

หลังจากนำเข้าส่วนหัว Objective-C แล้ว คุณสามารถใช้คลาสในโค้ด iOS Swift ของคุณได้ Swift จะสร้างอินเทอร์เฟซ iOS Swift แบบเนทีฟโดยอัตโนมัติสำหรับคลาส Objective-C ที่นำเข้า ซึ่งช่วยให้คุณใช้งานได้เหมือนกับคลาส Swift อื่นๆ

2. การใช้คลาส Swift ใน Objective-C

ในการทำให้คลาส Swift ของคุณพร้อมใช้งานใน Objective-C คุณต้องทำตามขั้นตอนเหล่านี้:

2.1 เปิดเผย Swift Classes เป็น Object-C

ตรวจสอบให้แน่ใจว่าคลาส Swift ของคุณสืบทอดมาจาก NSObject หรือคลาส Objective-C อื่นๆ จากนั้นเพิ่ม@objcแอตทริบิวต์ก่อนคำจำกัดความของคลาส:

import Foundation

@objc class MySwiftClass: NSObject {
    // Your class implementation
}
2.2 นำเข้า Swift Header ใน Objective-C

ในไฟล์ Objective-C ของคุณ ให้นำเข้าส่วนหัว Swift ที่สร้างโดย Xcode:

#import "<YourProjectName>-Swift.h"

ไฟล์ส่วนหัวนี้ถูกสร้างขึ้นโดยอัตโนมัติโดย Xcode และรวมการประกาศสำหรับคลาส Swift ทั้งหมดที่มี@objcแอตทริบิวต์

2.3 การใช้คลาส Swift ใน Objective-C

เมื่อคุณนำเข้าส่วนหัวของ iOS Swift แล้ว คุณสามารถใช้คลาส Swift ในโค้ด Objective-C ได้เหมือนกับคลาส Objective-C อื่นๆ

3. การเชื่อมโยงส่วนหัว (Bridging headers) และการแปลงประเภท (type conversions)

เมื่อทำงานกับการทำงานร่วมกันของ Swift และ Objective-C คุณอาจต้องจัดการกับการแปลงประเภทระหว่างสองภาษา

3.1 การเชื่อมประเภท Swift และ Objective-C

ในกรณีส่วนใหญ่ ประเภท Swift และ Objective-C จะถูกเชื่อมโยงโดยอัตโนมัติ:

  • Swift สตริง ↔ Objective-C NSString
  • Swift Array ↔ Objective-C NSArray
  • พจนานุกรม Swift ↔ Objective-C NSDictionary
  • ชุด Swift ↔ Objective-C NSSet

อย่างไรก็ตาม บางประเภทต้องมีการแปลงด้วยตนเอง:

  • ต้องระบุ Swift enums ด้วย@objcแอตทริบิวต์ที่จะเปิดเผย Objective-C
  • ต้องแมปบล็อก Objective-C กับการปิด Swift
3.2 ประเภทการแปลงในโค้ด

ในบางกรณี คุณอาจต้องทำการแปลงประเภทอย่างชัดเจนในโค้ดของคุณ:

// Convert NSString to String
let swiftString = objCString as String

//Convert String to NSString
let objCString = swiftString as NSString

// Convert NSArray to [AnyObject]
let swiftArray = objCArray as [AnyObject]

// Convert [AnyObject] to NSArray
let objCArray = swiftArray as NSArray

// Convert NSDictionary to [String: AnyObject]
let swiftDictionary = objCDictionary as [String: AnyObject]

// Convert [String: AnyObject] to NSDictionary
let objCDictionary = swiftDictionary as NSDictionary

// Convert NSSet to Set<AnyObject>
let swiftSet = objCSet as Set<AnyObject>

// Convert Set<AnyObject> to NSSet
let objCSet = swiftSet as NSSet

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

การทำงานร่วมกันของ iOS Swift และ Objective-C เป็นสิ่งสำคัญสำหรับการทำแอพ iOS ที่ต้องจัดการกับโค้ดเดิมหรือต้องการใช้ประโยชน์จากทั้งสองภาษาในโครงการของพวกเขา คู่มือฉบับสมบูรณ์นี้ครอบคลุมถึงวิธีใช้คลาส Objective-C ใน iOS Swift วิธีใช้คลาส Swift ใน Objective-C และวิธีทำงานกับบริดจ์ส่วนหัวและการแปลงประเภทเพื่อให้สามารถทำงานร่วมกันได้อย่างราบรื่นระหว่างภาษาเหล่านี้ เมื่อทำความเข้าใจและนำแนวคิดเหล่านี้ไปใช้ คุณจะสามารถลดช่องว่างระหว่าง Swift และ Objective-C ในการทำแอพ iOS ของคุณได้อย่างมีประสิทธิภาพ

เขียน App iOS Swift

ตอนที่ 9 iOS Swift การจัดการหน่วยความจำ (Memory Management)