Kas yra tiltas tarp Toll-free ir Swift?
sobes.tech AI
Atsakymas iš AI
Tiltas tarp Toll-free ir Swift — tai mechanizmas, leidžiantis naudoti kai kuriuos Foundation tipus (iš Objective-C), kurie yra "Toll-free bridged" su jų analogais Core Foundation (iš C), tiesiogiai Swift ir atvirkščiai, be aiškaus naujų objektų kūrimo ar konvertavimo. Tai užtikrina tarpusavio veikimą tarp Swift ir senųjų Objective-C/C karkasų, iš kurių daugelis naudoja Core Foundation.
Toll-free bridging reiškia, kad galite laisvai perduoti vieno tipo egzempliorius ten, kur tikimasi kito tipo egzemplioriaus, ir atvirkščiai, be papildomų išlaidų kurti naują objektą. Swift kontekste tai taikoma kai kuriems Foundation tipams, tokiems kaip NSString, NSArray, NSDictionary, NSDate, kurie gali būti naudojami kaip jų analogai Swift: String, Array, Dictionary, Date.
Toll-free bridged tipų pavyzdžiai:
CFStringRef<=>NSString<=>StringCFArrayRef<=>NSArray<=>ArrayCFDictionaryRef<=>NSDictionary<=>DictionaryCFDateRef<=>NSDate<=>Date
Swift "automatiškai" atlieka šį tiltą sąveikaujant su Objective-C API, kas daro kodą švaresnį ir patogesnį.
import Foundation // įtraukia Foundation ir leidžia naudoti NS tipus
let nsString: NSString = "Sveiki iš Swift" // NSString objektas
let swiftString: String = nsString as String // NSString automatiškai konvertuojamas į String
let swiftArray: [Int] = [1, 2, 3] // Swift masyvas
let nsArray: NSArray = swiftArray as NSArray // Swift masyvas automatiškai konvertuojamas į NSArray
// Pavyzdys, kaip naudoti NSString funkcijoje, kuri laukia String (ir atvirkščiai)
func printString(_ str: String) {
print(str)
}
printString(nsString as String) // perduodame NSString, kuris laukia String
func printNSString(_ nsStr: NSString) {
print(nsStr)
}
printNSString(swiftString as NSString) // perduodame String, kuris laukia NSString
Tiltas tarp Toll-free ir Swift yra dalis bendros Apple strategijos, siekiant užtikrinti suderinamumą tarp Swift ir legacy Objective-C/C kodo. Tai žymiai palengvina naujo Swift kodo migraciją ir integraciją su esamais projektais.