¿Qué es un puente entre Toll-free y Swift?
sobes.tech AI
Respuesta de la IA
El puente entre Toll-free y Swift es un mecanismo que permite utilizar algunos tipos de Foundation (de Objective-C), que están "Toll-free bridged" con sus equivalentes en Core Foundation (de C), directamente en Swift, y viceversa, sin necesidad de crear nuevos objetos o realizar conversiones explícitas. Esto garantiza la interoperabilidad entre Swift y los antiguos frameworks en Objective-C/C, muchos de los cuales utilizan Core Foundation.
El puente Toll-free significa que puedes transferir libremente instancias de un tipo a donde se espera una instancia de otro tipo, y viceversa, sin costos adicionales de crear un nuevo objeto. En el contexto de Swift, esto se aplica a ciertos tipos de Foundation, como NSString, NSArray, NSDictionary, NSDate, que pueden usarse como sus equivalentes en Swift: String, Array, Dictionary, Date.
Ejemplos de tipos Toll-free bridged:
CFStringRef<=>NSString<=>StringCFArrayRef<=>NSArray<=>ArrayCFDictionaryRef<=>NSDictionary<=>DictionaryCFDateRef<=>NSDate<=>Date
Swift realiza "automáticamente" este puente al interactuar con API escritas en Objective-C, lo que hace que el código sea más limpio y cómodo.
import Foundation // Incluye Foundation y permite usar tipos NS
let nsString: NSString = "Hola desde Swift" // Objeto NSString
let swiftString: String = nsString as String // NSString se convierte automáticamente en String
let swiftArray: [Int] = [1, 2, 3] // Array en Swift
let nsArray: NSArray = swiftArray as NSArray // Array en Swift se convierte automáticamente en NSArray
// Ejemplo de uso de NSString en una función que espera un String (y viceversa)
func printString(_ str: String) {
print(str)
}
printString(nsString as String) // Pasamos NSString, que espera un String
func printNSString(_ nsStr: NSString) {
print(nsStr)
}
printNSString(swiftString as NSString) // Pasamos String, que espera un NSString
El puente entre Toll-free y Swift es parte de la estrategia general de Apple para garantizar la compatibilidad entre Swift y el código legado en Objective-C y C. Facilita significativamente la migración e integración del nuevo código Swift en proyectos existentes.