Sobes.tech
Middle+

Co je to most mezi Toll-free a Swift?

sobes.tech AI

Odpověď od AI

Most mezi Toll-free a Swift je mechanismus, který umožňuje používat některé typy Foundation (z Objective-C), které jsou "Toll-free bridged" s jejich ekvivalenty v Core Foundation (z C), přímo ve Swift, a naopak, bez nutnosti explicitního vytváření nových objektů nebo konverzí. To zajišťuje interoperabilitu mezi Swift a staršími frameworky v Objective-C/C, z nichž mnoho používá Core Foundation.

Toll-free bridging znamená, že můžete volně předávat instance jednoho typu tam, kde se očekává instance jiného typu, a naopak, bez dodatečných nákladů na vytvoření nového objektu. V kontextu Swift se to vztahuje na některé typy Foundation, jako jsou NSString, NSArray, NSDictionary, NSDate, které mohou být použity jako jejich ekvivalenty ve Swift: String, Array, Dictionary, Date.

Příklady Toll-free bridged typů:

  • CFStringRef <=> NSString <=> String
  • CFArrayRef <=> NSArray <=> Array
  • CFDictionaryRef <=> NSDictionary <=> Dictionary
  • CFDateRef <=> NSDate <=> Date

Swift "automaticky" provádí tento most při interakci s API psanými v Objective-C, což činí kód čistším a pohodlnějším.

import Foundation // Zahrnuje Foundation a umožňuje používat typy NS

let nsString: NSString = "Ahoj ze Swift" // Objekt NSString
let swiftString: String = nsString as String // NSString je automaticky převeden na String

let swiftArray: [Int] = [1, 2, 3] // Swift pole
let nsArray: NSArray = swiftArray as NSArray // Swift pole je automaticky převedeno na NSArray

// Příklad použití NSString ve funkci, která očekává String (a naopak)
func printString(_ str: String) {
    print(str)
}

printString(nsString as String) // Předáváme NSString, očekává se String

func printNSString(_ nsStr: NSString) {
    print(nsStr)
}

printNSString(swiftString as NSString) // Předáváme String, očekává se NSString

Most mezi Toll-free a Swift je součástí celkové strategie Apple k zajištění kompatibility mezi Swift a legacy kódem v Objective-C a C. Výrazně usnadňuje migraci a integraci nového Swift kódu do stávajících projektů.