ฉันต้องการสร้างหมวดหมู่ของคลาส swift ที่มีอยู่ แต่ไม่มีตัวเลือกใน IDE ให้ทำเช่นนั้น
มีความคิดใดบ้างหากมีหมวดหมู่อยู่ในโครงการที่รวดเร็ว หรือจะบรรลุฟังก์ชันที่คล้ายกันในโครงการที่รวดเร็วได้อย่างไร?
ฉันต้องการสร้างหมวดหมู่ของคลาส swift ที่มีอยู่ แต่ไม่มีตัวเลือกใน IDE ให้ทำเช่นนั้น
มีความคิดใดบ้างหากมีหมวดหมู่อยู่ในโครงการที่รวดเร็ว หรือจะบรรลุฟังก์ชันที่คล้ายกันในโครงการที่รวดเร็วได้อย่างไร?
คำตอบ:
ใน Swift คุณสามารถใช้Extensions
เพื่อเพิ่มฟังก์ชันใหม่ให้กับคลาสโครงสร้างและประเภทการแจงนับที่มีอยู่
พวกเขาแตกต่างจากหมวด Objective-C ในสองสามวิธีหลัก ๆ :
ดังเช่นปัจจุบันส่วนขยายสามารถ:
ไวยากรณ์พื้นฐานในการประกาศส่วนขยายมีดังนี้:
extension SomeType {
// new functionality to add to SomeType goes here
}
ตรวจสอบเอกสารของ Appleสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ส่วนขยายใน Swift
ใน Objective C เรียกว่าหมวดหมู่แต่ใน Swift เรียกว่าส่วนขยายส่วนขยายจุดประสงค์ของทั้งคู่คือเพื่อเพิ่มฟังก์ชันการทำงานเพิ่มเติมให้กับคลาสที่มีอยู่โดยไม่ต้องสร้างคลาสย่อย
ฉันได้อ่านเกี่ยวกับส่วนขยายในเอกสารประกอบ แต่ฉันไม่เข้าใจวิธีใช้ส่วนขยายในโครงการของฉันจนกว่าฉันจะดูวิดีโอแนะนำนี้ ( เวอร์ชัน YouTube , แหล่ง github )
นี่คือบทสรุปที่นำมาจากวิดีโอวิธีการทำ
คลิกขวาใน Project Navigator แล้วเลือก "New File ... "
เลือก "ไฟล์ Swift"
หลักการคือการบันทึกชื่อไฟล์เป็นชื่อคลาสที่คุณกำลังขยายบวก (ด้วยเครื่องหมาย "+") สิ่งที่คุณกำลังทำ ตัวอย่างเช่น "UIImage + Cropping"
เปิดไฟล์ Swift ใหม่ที่คุณเพิ่งสร้างขึ้น
คุณควรนำเข้าUIKit
(แทนFoundation
) หากคุณกำลังขยายไฟล์UIView
. จากนั้นใช้ไฟล์extension
คีย์เวิร์ดหน้าชื่อคลาสที่คุณต้องการขยาย จากนั้นคุณสามารถเพิ่มวิธีการใหม่ของคุณเองในชั้นเรียนได้ (หมายเหตุส่วนขยายมีไว้สำหรับการเพิ่มวิธีการใหม่ไม่ได้แทนที่วิธีการที่มีอยู่ดังนั้นชื่อนี้)
ในวิดีโอตัวอย่างคือการเพิ่มวิธีการครอบตัดวงกลมจากรูปภาพและกำหนดเส้นขอบ
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
ดูที่นี่สำหรับตัวอย่างเต็มรูปแบบ
ตอนนี้คุณสามารถใช้วิธีการใหม่สำหรับคลาสนั้นได้ทุกที่ในโค้ดของคุณเช่นเดียวกับที่เป็นส่วนหนึ่งของคลาสมาตรฐาน
นี่คือตัวอย่างของวิดีโอ ( บน github ):
import UIKit
class ViewController: UIViewController {
@IBOutlet var imageView : UIImageView = nil
override func viewDidLoad() {
super.viewDidLoad()
let img = imageView.image
imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20)
}
}
วิธีcropToCircleWithBorderColor
นี้ไม่ได้เป็นส่วนมาตรฐานUIImage
แต่อย่างที่คุณเห็นมันถูกใช้เหมือนเดิม
ใน Swift เรียกว่าExtensions ! ลองดูสิ
extension
ไม่สามารถรวมตัวแปรได้ซึ่งทำให้สิ่งต่างๆแตกต่างกันโดยสิ้นเชิง
คุณสามารถใช้รหัสต่อไปนี้ในชั้นเรียนที่คุณมีอยู่
extension name{
func funcName(){
}
}
extension
.