Mi az a híd a Toll-free és a Swift között?
sobes.tech MI
Válasz az MI-től
A Toll-free és Swift közötti híd egy olyan mechanizmus, amely lehetővé teszi bizonyos Foundation típusok (Objective-C-ből), amelyek "Toll-free bridged"-ek a Core Foundation (C-ből) megfelelőivel, közvetlenül Swiftben való használatát, és fordítva, anélkül, hogy új objektumokat kellene létrehozni vagy explicit konverziókat végezni. Ez biztosítja a Swift és a régi Objective-C/C keretrendszerek közötti interoperabilitást, amelyek közül sok a Core Foundation-t használja.
A Toll-free bridging azt jelenti, hogy szabadon átadhatja egyik típus példányát a másik típus várakozó helyére, és fordítva, anélkül, hogy extra költséget jelentene új objektum létrehozása. Swift kontextusában ez bizonyos Foundation típusokra vonatkozik, mint például NSString, NSArray, NSDictionary, NSDate, amelyek Swiftben a megfelelőiként használhatók: String, Array, Dictionary, Date.
Példák Toll-free bridged típusokra:
CFStringRef<=>NSString<=>StringCFArrayRef<=>NSArray<=>ArrayCFDictionaryRef<=>NSDictionary<=>DictionaryCFDateRef<=>NSDate<=>Date
A Swift "automatikusan" végzi ezt a hidat az Objective-C-ben írt API-kkal való interakció során, ami tisztább és kényelmesebb kódot eredményez.
import Foundation // Tartalmazza a Foundation-t és lehetővé teszi az NS típusok használatát
let nsString: NSString = "Szia Swift-ből" // NSString objektum
let swiftString: String = nsString as String // Az NSString automatikusan konvertálódik String-re
let swiftArray: [Int] = [1, 2, 3] // Swift tömb
let nsArray: NSArray = swiftArray as NSArray // A Swift tömb automatikusan konvertálódik NSArray-re
// Példa az NSString használatára egy olyan függvényben, amely String-et vár (és fordítva)
func printString(_ str: String) {
print(str)
}
printString(nsString as String) // NSString átadása, String-et vár
func printNSString(_ nsStr: NSString) {
print(nsStr)
}
printNSString(swiftString as NSString) // String átadása, NSString-et vár
A Toll-free és Swift közötti híd része az Apple általános stratégiájának, amely biztosítja a kompatibilitást Swift és a legacy Objective-C/C kód között. Ez jelentősen megkönnyíti az új Swift kód migrációját és integrációját a meglévő projektekbe.