- การใช้คลาส Objective-C ใน Swift
- การใช้คลาส Swift ใน Objective-C
- การเชื่อมโยงส่วนหัว (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 ของคุณ หากต้องการสร้างให้ทำตามขั้นตอนเหล่านี้:
- ในโครงการ Xcode ของคุณ ให้ไปที่ File > New > File
- เลือกเทมเพลต “Header File” ในส่วน iOS > Source แล้วคลิก “Next”
- ตั้งชื่อไฟล์ ” -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 ของคุณได้อย่างมีประสิทธิภาพ