คำแนะนำทีละขั้นตอนในการแปลงแอป Objective-C แบบเต็มเป็น Swift
เผยแพร่แล้ว: 2018-03-14นับตั้งแต่เปิดตัวในปี 2014 ภาษาโปรแกรมของ Apple Swift ก็มีการเติบโตอย่างมาก ภาษาโปรแกรมสามารถจัดการได้ในตำแหน่งที่น่าเบื่อของ ภาษาโปรแกรม 10 อันดับแรก แบ่งปัน ตำแหน่งกับ Objective-C รุ่นก่อน แต่สงครามแห่งความรวดเร็วกับวัตถุประสงค์-C ไม่เคยสงบลง
ด้วยความนิยมและคุณสมบัติที่น่าตื่นเต้นที่เพิ่มขึ้นนี้ นักพัฒนาแอปพลิเคชัน iOS จำนวนมากที่เคยทำงานกับ Obj-C ได้เปลี่ยนมาใช้ภาษาโปรแกรม Swift อันที่จริงภายในการต่อสู้ของ Swift หรือ Objective-C สำหรับ iOS แอพ iOS ต่างๆ เช่น LinkedIn, Yahoo Weather, Hipmunk และ Lyft ได้รับการอัปเกรดจาก Objective-C เป็น Swift แล้ว ในขณะที่หลายคนกำลังวางแผนที่จะแปลงแอป Objective-C ถึงสวิฟท์
ปัจจัยที่ทำให้ตัวเลือกสวิฟท์ดีขึ้น
โดยส่วนตัวแล้ว ฉันเห็นวิวัฒนาการของ Swift ตั้งแต่เปิดตัวรุ่นแรก และพูดได้เลยว่าระหว่าง Swift กับ C นั้น Swift จะมาแทนที่ Objective-C โดยอิงจากปัจจัยต่างๆ เช่น
โอเพ่นซอร์ส
Swift เป็นภาษาโอเพ่นซอร์สและโค้ดที่รวดเร็วสามารถพกพาไปบนแพลตฟอร์มต่างๆ ได้มากกว่า Objective-C ที่เคยมีมา
ความเร็ว
การพัฒนา Swift สำหรับ iOS เป็นภาษาแบบคงที่ซึ่งทำงานร่วมกับคอมไพเลอร์ LLVM และสามารถใช้โค้ดที่มีอยู่ซ้ำได้ กำจัดทรัพยากรที่ไม่ได้ใช้ จัดการฟังก์ชันอินไลน์ และอื่นๆ นอกจากนี้ การทำงานของมันยังใช้หนึ่งในการคำนวณอัลกอริธึมที่เร็วที่สุดใน C++ ซึ่งพิสูจน์ให้เห็นว่ามีความได้เปรียบในการแข่งขันเหนือรุ่นก่อน
ตามที่ Apple อ้างและฉันมีประสบการณ์ อัลกอริทึมการค้นหา Swift นั้นเร็วกว่า Objective-C 2.6 เท่า
ความสามารถในการอ่าน
ต่างจาก Objective-C, Swift ไม่ได้ผูกติดกับฐานราก C ช่วยให้นักพัฒนา iOS สามารถลบการเรียกใช้เมธอดที่ซ้อนกัน ข้ามเครื่องหมายอัฒภาคที่ท้ายบรรทัด หลีกเลี่ยงการใส่ @ ที่จุดเริ่มต้นของคีย์เวิร์ด ต่อสตริงโดยใช้เครื่องหมาย "+" เป็นต้น นอกจากนี้ คลาส Swift ไม่ได้ถูกแบ่งออกเป็นส่วน ๆ อินเทอร์เฟซ และการใช้งาน ซึ่งลดความยาวของโค้ดลงเหลือเกือบครึ่งหนึ่ง ทำให้อ่านง่ายขึ้น
ตัวอย่างเช่น เมื่อแอพ Lyft ถูกเขียนใหม่ในภาษา Swift ตั้งแต่เริ่มต้น โค้ดของแอพลดลงจาก 75,000 เป็น 25,000 บรรทัด ตัวเลขที่น่าประทับใจนี้ช่วยลดความพยายามของนักพัฒนาโดยไม่กระทบต่อประสิทธิภาพของแอปที่ส่วนท้ายของลูกค้า
การเข้ารหัสเชิงโต้ตอบ
ด้วยฟีเจอร์ Playgrounds ช่วยให้โปรแกรมเมอร์สามารถเขียนโค้ดหรืออัลกอริธึมในขณะที่รวบรวมคำติชมตลอดขั้นตอนการพัฒนา เนื่องจากโค้ด Swift เขียนโดยใช้การแสดงภาพข้อมูล จึงทำให้ กระบวนการพัฒนาแอป ง่ายขึ้นและเข้าถึงได้
ความปลอดภัย
Swift เป็นภาษาที่ปลอดภัยกว่าสำหรับการสร้างแอพตามแนวโน้มของตลาดในปัจจุบัน ไวยากรณ์และโครงสร้างภาษาได้แยกประเภทของข้อผิดพลาดที่มักพบเห็นขณะเขียนโค้ดในภาษา Objective-C ซึ่งหมายความว่ามีโอกาสน้อยกว่าที่แอปจะขัดข้องและกรณีของพฤติกรรมที่เป็นปัญหา
ต่างจากในกรณีของ Objective-C โค้ดที่เขียนด้วย Swift สามารถคอมไพล์ได้และแก้ไขข้อผิดพลาดได้ ควบคู่ไปกับส่วนการเขียนโค้ด ดังนั้น Swift จึงทำงานได้ดีและเร็วขึ้นในกระบวนการทดสอบ เมื่อเทียบกับกระบวนการทดสอบโค้ด Objective-C
การซ่อมบำรุง
เนื่องจาก Swift ไม่มีการพึ่งพา C เหมือนรุ่นก่อน การบำรุงรักษาในกรณีของการพัฒนาแอพ Swift นั้นง่ายกว่ามาก สิ่งที่ทำให้ Swift เป็นอนาคตของการพัฒนาแอ พ iOS
ในกรณีของการสร้างแอพ iOS โดยใช้ Objective-C นักพัฒนาควรจะรักษาไฟล์โค้ดที่แตกต่างกันสองไฟล์เพื่อเพิ่มเวลาในการสร้างและประสิทธิภาพของโค้ด อย่างไรก็ตาม Swift ได้ยกเลิกกลไกสองไฟล์นี้ โดยผสานส่วนหัว Objective-C (.h) และไฟล์การใช้งาน (.m) เป็นไฟล์เดียว (.swift) คอมไพเลอร์ LLVM จะค้นหาการพึ่งพาโดยอัตโนมัติขณะอ่านไฟล์ Swift ซึ่งเป็นประโยชน์อย่างยิ่งต่อนักพัฒนาแอปพลิเคชัน iOS
นอกเหนือจากปัจจัยที่กล่าวข้างต้น ประโยชน์ที่คุ้มค่าของการเลือก Swift เหนือภาษาการเขียนโปรแกรมอื่นๆ ของ Apple คือความเข้ากันได้กับ Objective-C Apple ได้เสนอให้นักพัฒนาแอพสามารถใช้ทั้งสองภาษาในโครงการเดียวกันได้ สิ่งนี้ไม่เพียงแค่มีประโยชน์ในกรณีของการพัฒนาแอพ iOS โดยใช้ Swift ตั้งแต่เริ่มต้น แต่ยังรวมถึงการอัปเกรดแอพที่มีอยู่เป็น Swift โดยใช้โค้ด Objective-C
ในขณะที่คุณคุ้นเคยกับความแตกต่างทางปรัชญาระหว่างภาษาการพัฒนาแอปพลิเคชัน iOS สองภาษาแล้ว ให้ย้ายไปยังความแตกต่างในขณะที่นำไปปฏิบัติจริง
SWIFT VS OBJECTIVE-C: ความแตกต่างที่สำคัญระหว่าง TITAN ของการพัฒนา IOS
จากประสบการณ์ของผมกับฐานรหัส Objective-C และ Swift codebase ที่ซับซ้อน คุณจะได้พบกับการอัปเกรดหลาย ๆ อย่างสำหรับแนวคิดที่มีอยู่พร้อมกับการแนะนำองค์ประกอบใหม่ต่างๆ ที่ทำให้กระบวนการพัฒนาแอปเป็นไปอย่างรวดเร็ว โดยไม่ต้องกังวลใจ มาดูทุกสิ่งที่คุณจะพบสิ่งใหม่/แตกต่างในสงครามของสวิฟต์กับวัตถุประสงค์ค
ตัวเลือก
เมื่อเราพูดถึงประสิทธิภาพที่รวดเร็วเทียบกับ Objective-C เราสามารถเรียกใช้เมธอดบนอ็อบเจกต์ที่ไม่มีศูนย์เพื่อรับค่าศูนย์ใน Obj-C เราต้องทำการตรวจสอบ nil ด้วยตนเองเพื่อทำความเข้าใจพฤติกรรมที่ไม่ได้กำหนดไว้ในกรณีที่มีค่าศูนย์ที่ไม่คาดคิด อย่างไรก็ตาม ปัญหานี้สามารถแก้ไขได้โดยใช้ Optional ซึ่งเป็นแนวคิดใหม่ที่นำมาใช้ในโค้ด Swift ทางเลือก อนุญาตให้ใช้ฟังก์ชันที่อาจไม่สามารถคืนค่าที่มีความหมายเพื่อคืนค่าที่ห่อหุ้มในตัวเลือกหรือไม่ก็ได้
ไวยากรณ์ของการประกาศประเภทตัวเลือกคือ:
enum สาธารณะตัวเลือก<ห่อ> :_Reflectable, NilLiteralConvertible
ในทางปฏิบัติ มันสามารถมีค่าของประเภท Wrapped หรือค่าที่ไม่มีอยู่
Swift แสดงน้ำตาล syntax สำหรับการประกาศประเภท optional ดังนั้นเราสามารถแทนที่ Optional<String> ด้วย String?
มีสองวิธีหลักในการรับค่าที่ห่อหุ้มจากคอนเทนเนอร์เสริม:
การโยงทางเลือก: ใช้ในกรณีที่คำสั่งเงื่อนไข if-let จะได้รับค่าก็ต่อเมื่อมี
Forced Wrapping: ใช้เมื่อตัวแปรที่ประกาศเป็นทางเลือกที่ไม่ใช่ศูนย์ หากมีค่าอยู่ ก็จะให้ผลลัพธ์โดยไม่ต้องใช้เงื่อนไข แต่ในอีกกรณีหนึ่งมันจะพัง
นอกจากนี้เรายังสามารถค้นหาตัวเลือกที่ไม่ได้ห่อหุ้มโดยปริยายในภาษา Swift ซึ่งประกาศเป็น String!
ตัวอย่างเช่น:
คลาส XClass
{
var aString: สตริง
var bString: สตริง!
var cString: สตริง?
เริ่มต้น (สตริง: สตริง)
{
aString = สตริง
}
}
ที่นี่,
สตริงไม่สามารถเป็นศูนย์ได้ เป็นสิ่งสำคัญที่ตัวแปรนี้มีค่าในระหว่างการเริ่มต้นวัตถุ มิฉะนั้น โปรแกรมจะทำให้เกิดความผิดพลาด
B สตริงสามารถเป็นศูนย์ได้ อย่างไรก็ตาม หากคุณพยายามเข้าถึงวัตถุที่ไม่มีศูนย์ โปรแกรมจะหยุดทำงาน
C String สามารถเป็นศูนย์ได้และควรถือเป็นตัวแปรทางเลือกปกติ
ส่วนขยาย
ส่วนขยายและหมวดหมู่ที่พบใน Obj-C ถูกรวมเป็นเอนทิตีเดียว ส่วนขยายในภาษา Swift ส่วนขยายเพิ่มฟังก์ชันการทำงานใหม่ให้กับคลาส การแจงนับ โครงสร้าง หรือโปรโตคอลที่มีอยู่แล้ว และส่วนที่ดีที่สุดคือคุณไม่จำเป็นต้องมีสิทธิ์เข้าถึงซอร์สโค้ดต้นฉบับเพื่อขยายประเภท
ทูเปิลส์
นอกจาก Optionals แล้ว ยังมีประเภทข้อมูลใหม่อีกประเภทหนึ่งที่นำมาใช้ในภาษาการพัฒนาใหม่ของ Apple คือ Tuples ทูเปิลส์ (แทนที่ประเภทข้อมูลที่ผู้ใช้กำหนด) โดยพื้นฐานแล้วจะพิจารณาเพื่อจัดกลุ่มค่าจำนวนมากให้อยู่ในกลุ่มแบบผสมเดียว เป็นองค์ประกอบที่เหมาะสมที่ควรพิจารณาหากคุณคิดว่าการสร้างแบบจำลองในสถานที่นั้นอาจใช้ทักษะมากเกินไป และพจนานุกรมไม่เพียงพอต่อผู้อ่าน หากต้องการทราบ Tuples เพิ่มเติม โปรดอ้างอิง บล็อก นี้
ยาสามัญ
Generics เป็นหนึ่งในคุณสมบัติที่โดดเด่นที่สุดของภาษาการเขียนโปรแกรม Swift และอันที่จริง ไลบรารีมาตรฐาน Swift ส่วนใหญ่ถูกสร้างขึ้นด้วยโค้ด Swift โค้ดทั่วไปช่วยให้นักพัฒนาเขียนฟังก์ชันและประเภทที่ยืดหยุ่นและนำกลับมาใช้ใหม่ได้ ซึ่งสามารถทำงานกับชุดประเภทต่างๆ ได้ ขึ้นอยู่กับข้อกำหนดที่กำหนดไว้ ซึ่งช่วยลดความเสี่ยงของการทำซ้ำและเพิ่มความสามารถในการอ่านโค้ดด้วยวิธีที่ชัดเจนและเป็นนามธรรม
จากประสบการณ์ของฉัน Generics นั้นหายากในตอนแรก เช่นเดียวกับการเรียกซ้ำ แต่เมื่อคุณลงมือทำ คุณจะสามารถผ่อนคลายโลกใบใหม่แห่งการแก้ไขปัญหาเชิงตรรกะที่น่าเบื่อหน่ายได้
การแจงนับ
ในโค้ด Objective-C การแจงนับจำกัดเฉพาะประเภทดั้งเดิม สำหรับการแมปค่าการแจงนับจำนวนเต็มกับสตริงสำหรับการแสดงเอาต์พุต คุณต้องแนะนำอาร์เรย์หรือหันไปทางโครงสร้างการควบคุมสวิตช์ อย่างไรก็ตาม คุณไม่จำเป็นต้องผ่านความยุ่งยากเหล่านี้ด้วยภาษาการพัฒนาแอป Swift iOS
Swift เสนอการแจงนับใหม่ที่หลากหลายพร้อมตัวเลือกที่มากกว่า การแจงนับ Swift สามารถมีค่าที่เกี่ยวข้องได้ และการแจงนับ Swift สามารถเก็บชุดฟิลด์ที่กำหนดไว้ล่วงหน้าได้ อันที่จริง การแจงนับ Swift สามารถเป็นแบบเรียกซ้ำและสามารถเก็บค่าดิบได้
ตัวอย่างเช่น:
สมัครสมาชิก
ตัวห้อยสามารถถูกมองว่าเป็นสื่อกลางในการเข้าถึงข้อมูลจากลำดับ การรวบรวม หรือรายการในคลาส การแจงนับ และโครงสร้างโดยไม่ต้องใช้เมธอด คุณสามารถพิจารณาตัวห้อยเพื่อตั้งค่าและดึงค่าตามดัชนีโดยไม่ต้องสร้างวิธีการแยกสำหรับการจัดเก็บและดึงข้อมูล ตัวอย่างเช่น คุณสามารถเข้าถึงองค์ประกอบในอินสแตนซ์ Array เป็น someArray[index] และองค์ประกอบในอินสแตนซ์ Dictionary เป็น someDictionary[key]
ไวยากรณ์สำหรับการประกาศตัวห้อยมีดังนี้:
ตัวห้อย (ดัชนี: Int) -> Int {
รับ {
//สำหรับการประกาศค่าตัวห้อย
}
ตั้งค่า (ค่าใหม่) {
//สำหรับกำหนดค่าต่างๆ
}
}
อนุมานประเภท
Swift ยังเสนอประเภทความปลอดภัยสำหรับการพัฒนาแอปพลิเคชัน iOS ตามที่ตัวแปรเมื่อประกาศด้วยประเภทใดประเภทหนึ่งจะเป็นแบบคงที่และไม่สามารถเปลี่ยนแปลงได้ คอมไพเลอร์จะกำหนด (หรืออนุมาน) ว่าตัวแปรของคุณจะเป็นประเภทใดโดยพิจารณาจากค่าที่คุณกำหนด
ตัวอย่างเช่น:
ที่นี่ คอมไพเลอร์จะแสดงข้อผิดพลาดเมื่อคุณพยายามเริ่มต้นด้วยค่าตัวเลขเป็นตัวแปร str2 (ดูด้านล่าง)
ฟังก์ชั่น
ไวยากรณ์ของฟังก์ชันในภาษาการเขียนโปรแกรม Swift มีความยืดหยุ่นในการกำหนดมากกว่าในรูปแบบโค้ด Objective-C ที่ซับซ้อน ใน Swift ทุกฟังก์ชันมีประเภทที่ประกอบด้วยประเภทพารามิเตอร์ของฟังก์ชันและประเภทการส่งคืน ซึ่งหมายความว่าคุณสามารถกำหนดฟังก์ชันให้กับตัวแปรหรือส่งผ่านเป็นค่าไปยังฟังก์ชันอื่นๆ ได้ (ดังแสดงในตัวอย่างด้านล่าง):
นอกเหนือจากนี้ Swift ยังให้นักพัฒนาแอพกำหนดค่าเริ่มต้นให้กับพารามิเตอร์การทำงาน
การจัดการข้อผิดพลาด
Swift นำเสนอแนวทางใหม่ทั้งหมดในการขว้าง จับ หมุนเวียน และจัดการข้อผิดพลาดที่กู้คืนได้ในขณะใช้งานจริง หากต้องการดูการจัดการข้อผิดพลาดใน Swift โปรดอ้างอิงบล็อก
นอกเหนือจากนี้ แนวคิดต่างๆ ที่ทำให้การพัฒนาแอป Swift เป็นประโยชน์ต่อการพัฒนาแอป Objective-C ได้แก่:
โมเดล
ในกรณีของ Swift โมเดลมักจะเป็นโครงสร้างมากกว่าคลาส
โปรโตคอล
ในวิดีโอ Apple WWDC แรกสุด Swift ถูกนำมาใช้เป็น “ภาษาเชิงโปรโตคอล” โปรโตคอลสามารถกำหนดเป็นพิมพ์เขียวของวิธีการ คุณสมบัติ และเอนทิตีอื่น ๆ ที่เหมาะกับงาน/ชิ้นส่วนของการทำงานเฉพาะ พวกเขาสามารถรวบรวมโดยคลาส การแจงนับ หรือโครงสร้างเพื่ออำนวยความสะดวกในการใช้งานจริงของข้อกำหนดเหล่านั้น และมีประสิทธิภาพมากกว่าเมื่อเปรียบเทียบกับ Obj C ด้วยคุณสมบัติของการจัดเตรียมการใช้งานเริ่มต้น การรวมข้อมูลทั่วไป ฯลฯ
ในฐานะนักพัฒนาแอป iOS ฉันชอบสร้างโปรโตคอลก่อนที่จะกำหนดคลาสว่าเป็นแนวปฏิบัติที่ได้ผลมากที่สุดเพื่อใช้ประโยชน์จากภาษาการเขียนโปรแกรมขั้นสูงของ Apple
แนวทางการเขียนโปรแกรมเชิงฟังก์ชัน
Swift มอบอำนาจให้นักพัฒนาใช้วิธีการที่ใช้งานได้จริงในการแก้ปัญหาทางโลกมากกว่าการใช้ลูปแบบเดิมหรือประเภทอ้างอิง ในที่นี้ มุมมองคือการวิเคราะห์ปัญหาในแง่ของวิธีแก้ปัญหา แทนที่จะพิจารณาว่าจะได้วิธีแก้ปัญหาอย่างไรเหมือนที่ทำในแนวทางดั้งเดิม
จากประสบการณ์ของฉันกับทั้งภาษา iOS สิ่งหนึ่งที่ฉันสังเกตเห็นคือสิ่งที่เราทำโดยใช้การวนซ้ำใน Objective-C สามารถทำได้โดยใช้แนวคิดของตัวกรอง แผนที่ และการลดใน Swift หากต้องการทราบข้อมูลเชิงลึกเกี่ยวกับฟังก์ชันระดับสูงเหล่านี้ในการเขียนโปรแกรมฟังก์ชัน โปรดดูบล็อก
คำแนะนำทีละขั้นตอนในการแปลงแอปวัตถุประสงค์เต็มรูปแบบ-C เป็น SWIFT
วันนี้ มีเครื่องมือมากมายในการแปลงแอพจาก Objective-C เป็น Swift ทีละบรรทัด อย่างไรก็ตาม ฉันแนะนำว่าอย่าใช้เลย แม้ว่าภาษา iOS ทั้งสองจะทำงานร่วมกันได้ แต่กระบวนทัศน์ของโปรแกรมก็ต่างกัน การย้ายแอปจาก Obj-C ไปยัง Swift โดยตรงจะทำให้เกิดความเสี่ยงในการใช้กระบวนทัศน์ที่ไม่ถูกต้อง ให้ฉันอธิบายเกี่ยวกับเรื่องนี้
Swift ซึ่งแตกต่างจากรุ่นก่อน ได้รับอิทธิพลจากกระบวนทัศน์การเขียนโปรแกรมเชิงฟังก์ชัน ซึ่งทำให้ต้องอาศัยความไม่เปลี่ยนรูปอย่างมาก ตัวอย่างเช่น หากคุณพูดถึงอาร์เรย์และพจนานุกรม โมเดลพื้นฐานเหล่านี้จะใช้เป็นประเภทอ้างอิงใน Objective-C แต่เป็นประเภทค่าใน Swift จึงไม่เปลี่ยนรูปแบบ นี่หมายความว่าการแปลงโค้ด Obj-C เป็น Swift โดยไม่รู้ตัวโดยใช้เครื่องมือใดๆ จะทำให้คุณต้องเผชิญกับข้อผิดพลาดมากมายที่ยากต่อการดีบัก นอกจากนี้ Swift ยังมีฟีเจอร์ใหม่ๆ มากมาย (ตามที่อธิบายไว้ข้างต้น) ซึ่งทำให้อัลกอริทึม/แนวทางมีประสิทธิภาพมากขึ้นและโปรแกรมต่างๆ เร็วขึ้น! อันที่จริงแล้ว นั่นเป็นเหตุผลหลักว่าทำไม Apple จึงเปิดตัวภาษาใหม่แทนที่จะอัปเกรด Obj-C เมื่อพิจารณาประเด็นเหล่านี้แล้ว ฉันขอแนะนำให้ทุกคนเขียนแอปใหม่ใน Swift ตั้งแต่เริ่มต้น แทนที่จะไปแปลงทีละบรรทัดจาก Obj-C เป็น Swift
อย่างไรก็ตาม หากคุณต้องการแปลงแอป Objective-C แบบเต็มเป็น Swift เครื่องมือหนึ่งที่คุณสามารถใช้ได้คือ Swiftify เครื่องมือนี้ช่วยลดขั้นตอนการอัพเกรดโค้ด Obj-C เป็นภาษาการเขียนโปรแกรมใหม่ของ Apple ได้ในคลิกเดียว ประหยัดเวลาการทำงานหลายพันชั่วโมง คุณลักษณะของการทำงานร่วมกันทำให้สามารถผสานรวมโค้ด iOS ที่แปลงแล้วกลับไปเป็น Objective-C โดยไม่ต้องยุ่งยากใดๆ ซึ่งหมายความว่าคุณสามารถสำรวจตัวเลือกมากมายที่ Swift นำเสนอ แล้วรวมกลับเข้าไปในโปรเจ็กต์ Obj-C ของคุณโดยไม่ต้องเขียนใหม่ทั้งหมดพร้อมกัน
เตรียมรหัสแอปที่มีอยู่ของคุณสำหรับการแปลง
จะดีกว่าเสมอเพื่อเริ่มต้นด้วยรหัส Obj-C ล่าสุด นี่เป็นเพราะ Xcode มีตัวแปลง Objective-C ที่ทันสมัยซึ่งสามารถช่วยคุณได้:
1. เปลี่ยน id เป็น instancetype ได้ทุกเมื่อ
2. การใช้มาโคร enum ที่ถูกต้อง
3. การอัพเกรดเป็น @property syntax . ล่าสุด
แม้ว่าตัวแปลงจะช่วยในกลไกการวิเคราะห์และนำการเปลี่ยนแปลงที่เป็นไปได้ไปใช้ แต่ก็ไม่ได้แสดงถึงความหมายของโค้ด ดังนั้นจึงแนะนำให้นักพัฒนาแอปพลิเคชัน iOS ทุกคนตรวจสอบทุกอย่างด้วยตนเองหนึ่งครั้งแล้วจึงยืนยันการเปลี่ยนแปลง
ในการใช้ตัวแปลง เลือก Edit -> Refactor -> Change to Modern Objective-C syntax
ขั้นตอนการย้ายรหัส Objective-C ไปยัง Swift
แนวทางที่ได้ผลที่สุดในการแปลงแอป Objective-C แบบเต็มเป็น Swift คือ ให้เริ่มด้วยทีละคลาส โดยเฉพาะคลาสที่ไม่มีคลาสย่อยใดๆ เนื่องจากคุณไม่สามารถคลาสย่อย Swift ใน Obj-C
แทนที่ไฟล์ .m และ .h ที่เกี่ยวข้องกับคลาสด้วยไฟล์ .swift ไฟล์เดียว ด้วยเหตุนี้ ทุกอย่างตั้งแต่อินเทอร์เฟซไปจนถึงการใช้งานจะเข้าสู่ไฟล์ Swift โดยอัตโนมัติ นอกจากนี้ คุณไม่จำเป็นต้องสร้างไฟล์ส่วนหัวเนื่องจาก Xcode จะสร้างส่วนหัวโดยอัตโนมัติ หากจำเป็น
การออกแบบไฟล์ส่วนหัวของการเชื่อมต่อ
เมื่อคุณเพิ่มไฟล์ .swift ไฟล์แรก คุณจะพบข้อความแจ้งดังที่แสดงด้านล่าง
คลิกที่ตัวเลือก ' สร้างส่วนหัวของการเชื่อมต่อ '
คำแนะนำทีละขั้นตอน
1. เลือกคู่ของไฟล์ .h และ .m ที่คุณต้องการแปลงเป็น Swift หากคุณต้องการแปลงทั้งโปรเจ็กต์ ให้ปล่อยคลาส AppDelegate ไว้ใช้ภายหลัง
2. ค้นหา #import “MyViewController.h” ตลอดทั้งโค้ดและลบออกจากไฟล์ส่วนหัว Objective-C ([MyProject]-Bridging-Header.h)
3. แทนที่อินสแตนซ์ของ #import “[ชื่อไฟล์].h” ด้วย #import “[MyProject]-Swift.h” ในไฟล์ .m ทั้งหมด และใส่ @class [ชื่อไฟล์] แทน #import “[ชื่อไฟล์].h” ใน ไฟล์ .h ทั้งหมด
4. แปลงส่วนของไฟล์ Obj-C เป็น Swift สามารถทำได้ง่าย ๆ โดยใช้ส่วนขยาย Finder ของ 'Swiftify for Xcode' มิเช่นนั้น ให้คัดลอกเนื้อหาของไฟล์ .m และ .h เป็น .swift และใช้ตัวเลือก “แปลงไฟล์เป็น Swift” ที่มีอยู่ในส่วนขยาย Swiftify Xcode
5. แทนที่ไฟล์ .h และ .m ด้วยไฟล์ .swift ที่แปลงแล้วในโครงการ
6. รวบรวมโครงการและแก้ไขข้อผิดพลาดในการแปลง แม้ว่าปัญหามากมายจะจัดการได้อย่างง่ายดายโดยใช้คำแนะนำการแก้ไขอัตโนมัติของ Xcode แต่คุณยังสามารถพึ่งพา Swiftify เพื่อรายงานและแก้ไขข้อผิดพลาดที่ปรากฏหลายครั้งในโปรเจ็กต์ได้
7. เมื่อเสร็จแล้ว ให้สร้างและรันโครงการ หากเกิดปัญหา 'ไม่พบคลาส' ตามมาด้วยการหยุดทำงาน ให้ค้นหาข้อมูลอ้างอิงทั้งหมดในเครื่องมือแก้ไขกระดานเรื่องราว ป้อนชื่อคลาสใน Identity Inspector อีกครั้ง บันทึกแล้วลองอีกครั้ง
8. หากคุณกำลังแปลงทั้งโปรเจ็กต์ คุณสามารถเปลี่ยนคลาส AppDelegate ได้ทันที ณ จุดนี้ ไฟล์อื่นๆ ทั้งหมดได้รับการแปลงเป็น Swift แล้ว ดังนั้น หากไม่มีไฟล์ Obj-C เหลืออยู่ในเป้าหมาย คุณสามารถลบไฟล์ main.m และ .pch (ส่วนหัวที่คอมไพล์แล้ว) ได้อย่างง่ายดาย
คุณชอบแนวปฏิบัติแบบไหน – สร้างแอป iOS ใหม่ใน Swift ตั้งแต่เริ่มต้นหรือแปลง Objective-C เป็น Swift ทั้งหมด แบ่งปันมุมมองของคุณผ่านทางส่วนความคิดเห็นด้านล่าง