Čo je most medzi Toll-free a Swift?
sobes.tech AI
Odpoveď od AI
Most medzi Toll-free a Swift je mechanizmus, ktorý umožňuje používať niektoré typy Foundation (z Objective-C), ktoré sú "Toll-free bridged" s ich ekvivalentmi v Core Foundation (z C), priamo v Swift, a naopak, bez explicitného vytvárania nových objektov alebo konverzií. To zabezpečuje interoperabilitu medzi Swift a staršími frameworkmi v Objective-C/C, z ktorých mnohé používajú Core Foundation.
Toll-free bridging znamená, že môžete voľne prenášať inštancie jedného typu tam, kde sa očakáva inštancia iného typu, a naopak, bez dodatočných nákladov na vytvorenie nového objektu. V kontexte Swift sa to týka niektorých typov Foundation, ako sú NSString, NSArray, NSDictionary, NSDate, ktoré môžu byť použité ako ich ekvivalenty v Swift: String, Array, Dictionary, Date.
Príklady Toll-free bridged typov:
CFStringRef<=>NSString<=>StringCFArrayRef<=>NSArray<=>ArrayCFDictionaryRef<=>NSDictionary<=>DictionaryCFDateRef<=>NSDate<=>Date
Swift "automaticky" vykonáva tento most pri interakcii s API napísanými v Objective-C, čo robí kód čistejším a pohodlnejším.
import Foundation // Zahrňuje Foundation a umožňuje používanie NS typov
let nsString: NSString = "Ahoj od Swift" // Objekt NSString
let swiftString: String = nsString as String // NSString sa automaticky konvertuje na String
let swiftArray: [Int] = [1, 2, 3] // Swift pole
let nsArray: NSArray = swiftArray as NSArray // Swift pole sa automaticky konvertuje na NSArray
// Príklad použitia NSString v funkcii, ktorá očakáva String (a naopak)
func printString(_ str: String) {
print(str)
}
printString(nsString as String) // Odovzdávame NSString, očakáva sa String
func printNSString(_ nsStr: NSString) {
print(nsStr)
}
printNSString(swiftString as NSString) // Odovzdávame String, očakáva sa NSString
Most medzi Toll-free a Swift je súčasťou všeobecnej stratégie Apple na zabezpečenie kompatibility medzi Swift a legacy kódom v Objective-C a C. Výrazne uľahčuje migráciu a integráciu nového Swift kódu do existujúcich projektov.