Sobes.tech
Middle+

Ce este o punte între Toll-free și Swift?

sobes.tech AI

Răspuns de la AI

Podul dintre Toll-free și Swift este un mecanism care permite utilizarea anumitor tipuri de Foundation (din Objective-C), care sunt "Toll-free bridged" cu omologii lor din Core Foundation (din C), direct în Swift, și vice versa, fără a crea obiecte noi explicite sau a face conversii. Acest lucru asigură interoperabilitatea între Swift și vechile framework-uri Objective-C/C, multe dintre acestea folosind Core Foundation.

Toll-free bridging înseamnă că poți transfera liber instanțe ale unui tip acolo unde se așteaptă o instanță a altui tip, și vice versa, fără costuri suplimentare pentru crearea unui nou obiect. În contextul Swift, acest lucru se aplică anumitor tipuri de Foundation, precum NSString, NSArray, NSDictionary, NSDate, care pot fi folosite ca omologii lor în Swift: String, Array, Dictionary, Date.

Exemple de tipuri Toll-free bridged:

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

Swift realizează "automat" această punte la interacțiunea cu API-urile scrise în Objective-C, ceea ce face ca codul să fie mai curat și mai comod.

import Foundation // Include Foundation și permite utilizarea tipurilor NS

let nsString: NSString = "Salut din Swift" // Obiect NSString
let swiftString: String = nsString as String // NSString se convertește automat în String

let swiftArray: [Int] = [1, 2, 3] // Array Swift
let nsArray: NSArray = swiftArray as NSArray // Array Swift se convertește automat în NSArray

// Exemplu de utilizare a NSString într-o funcție care așteaptă un String (și invers)
func printString(_ str: String) {
    print(str)
}

printString(nsString as String) // Transmitere NSString, se așteaptă String

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

printNSString(swiftString as NSString) // Transmitere String, se așteaptă NSString

Podul dintre Toll-free și Swift face parte din strategia generală a Apple de a asigura compatibilitatea între Swift și codul legacy în Objective-C și C. Acesta facilitează migrația și integrarea noului cod Swift în proiecte existente.