Cyborg เป็นพอร์ตบางส่วนของ vectordrawable ของ Android ไปยัง iOS มันมีจุดประสงค์เพื่อทดแทน UIImages, แบบอักษรไอคอนและตัวเลือกภาพเวกเตอร์ PDF ของ Apple รูปแบบ vectordrawable มีข้อดีหลายประการ:
Cyborg ยังรองรับ MacOS (AppKit), TVOS และสามารถใช้งานได้จาก Swiftui อย่างไรก็ตามโปรดทราบว่าการใช้งานเหล่านี้มีความเป็นผู้ใหญ่น้อยกว่าเวอร์ชัน iOS
เราเปรียบเทียบไซบอร์กกับทางเลือกจำนวนหนึ่งโหลดไอคอน 50+ ที่มีอยู่ในชุดไอคอนแอพไดรเวอร์ของเรา
UIImage
เล็กน้อย ความแตกต่างควรอยู่ในเศษส่วนของมิลลิวินาทีในทางปฏิบัติหากประสิทธิภาพการแยกวิเคราะห์กลายเป็นปัญหาคุณอาจต้องการใช้กลไกการแคชที่เหมาะสมสำหรับแอปพลิเคชันของคุณหรือใช้ประโยชน์จากความปลอดภัยของด้ายของ Cyborg เพื่อทำการแยกวิเคราะห์ด้ายหลัก
ด้วยที่กล่าวว่าโอกาสในการปรับปรุงประสิทธิภาพจำนวนมากมีอยู่ในปัจจุบันดังนั้นประสิทธิภาพควรปรับปรุงในอนาคต จากการเขียนนี้ Swift เป็นภาษาเล็กและการปรับปรุงประสิทธิภาพโดยเฉพาะอย่างยิ่งในการสร้างสตริงการปิดและความเป็นเจ้าของควรมีผลกระทบเชิงบวกต่อประสิทธิภาพของ Cyborg
รายการคุณสมบัติทั้งหมดถูกระบุในเอกสาร Android
Cyborg รองรับ Swift Package Manager และ Carthage
ในการติดตั้งโดยใช้ Carthage:
github "uber/cyborg" ~> [desired version]
หากต้องการเพิ่ม Cyborg ลงในโครงการ XCode โดยใช้ Swift Package Manager ให้ทำตามคำแนะนำที่ Apple ให้ไว้
หลังจากทำตามขั้นตอนการรวมด้านล่างการใช้ Cyborg ต้องใช้รหัสมากกว่าการใช้ UIImage
เพียงเล็กน้อยเท่านั้น:
let vectorView = VectorView ( theme : myTheme )
vectorView . drawable = VectorDrawable . named ( " MyDrawable " )
Cyborg ถูกสร้างขึ้นเพื่อขยายกรณีการใช้งานที่ซับซ้อนและเช่นนี้ต้องมีการกำหนดค่าเล็กน้อยเพื่อให้ได้ตัวอย่างรหัสที่สะอาดด้านบน
มาดูวิธีการเขียนการรวมขั้นต่ำเพื่อเริ่มต้น:
หนึ่งในคุณสมบัติที่ดีที่สุดของ vectordrawables คือความสามารถในการแลกเปลี่ยนในค่าโดยพลการที่รันไทม์ สินทรัพย์ vectordrawable ที่เขียนขึ้นอย่างดีสามารถเปลี่ยนสีของพวกเขาเพื่อตอบสนองต่อการเปลี่ยนแปลงในสถานะแอพเช่นโหมดกลางคืน
อย่างไรก็ตามการเข้าถึงคุณสมบัติที่ทรงพลังเหล่านี้ทำให้เราต้องเขียนธีมและผู้ให้บริการทรัพยากรของเราเอง:
class Theme : Cyborg . ThemeProviding {
func colorFromTheme ( named _ : String ) -> UIColor {
return . black
}
}
class Resources : ResourceProviding {
func colorFromResources ( named _ : String ) -> UIColor {
return . black
}
}
สมมติว่าทรัพยากรไม่เคยเปลี่ยนแปลงตอนนี้เราสามารถเขียน Initializer ความสะดวกที่ปรากฎในตัวอย่างรหัสแรก:
fileprivate let resources = Resources ( )
extension VectorDrawable {
public convenience init ( theme : Theme ) {
self . init ( theme : theme , resources : resources ( )
}
}
หากด้วยเหตุผลบางอย่างคุณให้ vectordrawable ที่ไม่ถูกต้องแก่ Cyborg ฟังก์ชั่นการสร้างมาตรฐานใน Cyborg จะให้ข้อความแสดงข้อผิดพลาดโดยละเอียดที่คุณสามารถรายงานว่าเป็นผู้ไม่เสียค่าใช้จ่ายในการรายงานการรายงานข้อผิดพลาดที่คุณเลือก สิ่งนี้สามารถจัดการได้ที่ระดับ "แพลตฟอร์ม" ของแอปของคุณช่วยให้คุณเขียนโค้ดที่ถือว่าการแยกวิเคราะห์ประสบความสำเร็จเสมอเช่นเดียวกับ UIImage:
extension VectorDrawable {
public static func named ( _ name : String ) -> VectorDrawable ? {
return Bundle . main . url ( forResource : name , withExtension : " xml " ) . flatMap { url in
switch VectorDrawable . create ( from : url ) {
case . ok ( let drawable ) :
return drawable
case . error ( let error ) :
myAssertionFailureThatAlsoReportsToBackend ( " Could not create a vectordrawable named ( name ) ; the error was ( error ) " )
return nil
}
}
}
อย่างที่คุณอาจสังเกตเห็นแล้วธีมและวัตถุทรัพยากรที่คุณเขียนในส่วนก่อนหน้านี้ถูกพิมพ์อย่างเข้มงวด เพื่อป้องกันปัญหาเกี่ยวกับสินทรัพย์ที่อ้างอิงธีมที่ไม่มีอยู่หรือสีทรัพยากรคุณอาจต้องการผ้าสำลี XML เพื่อให้แน่ใจว่าถูกต้อง
คุณอาจพบว่าสะดวกในการอนุญาตให้นักออกแบบมอบสินทรัพย์ใหม่โดยตรงไปยัง repo ที่สามารถดึงเข้าไปใน Android และ iOS repos ของคุณโดยนักออกแบบ
วิธีที่ง่ายที่สุดในการตรวจสอบความถูกต้องของ UIs ของคุณที่ใช้ Drawables เวกเตอร์แบบคงที่คือการทดสอบสแน็ปช็อต UIs ที่ใช้พวกเขาโดยใช้เครื่องมือเช่น iossnapshottestcase สิ่งนี้จะช่วยให้มั่นใจได้ว่ารหัสใด ๆ ที่ไม่ได้ตรวจสอบคอมไพเลอร์ตรงกับความคาดหวังของคุณ