O que é uma ponte entre Toll-free e Swift?
sobes.tech IA
Resposta da IA
A ponte entre Toll-free e Swift é um mecanismo que permite usar alguns tipos de Foundation (de Objective-C), que são "Toll-free bridged" com os seus equivalentes em Core Foundation (em C), diretamente em Swift, e vice-versa, sem necessidade de criar novos objetos ou fazer conversões explícitas. Isto garante a interoperabilidade entre Swift e os antigos frameworks em Objective-C/C, muitos dos quais usam Core Foundation.
A ponte Toll-free significa que pode transferir livremente instâncias de um tipo para onde se espera uma instância de outro tipo, e vice-versa, sem custos adicionais de criação de um novo objeto. No contexto do Swift, isto aplica-se a certos tipos de Foundation, como NSString, NSArray, NSDictionary, NSDate, que podem ser usados como seus equivalentes em Swift: String, Array, Dictionary, Date.
Exemplos de tipos Toll-free bridged:
CFStringRef<=>NSString<=>StringCFArrayRef<=>NSArray<=>ArrayCFDictionaryRef<=>NSDictionary<=>DictionaryCFDateRef<=>NSDate<=>Date
O Swift realiza "automaticamente" esta ponte ao interagir com APIs escritas em Objective-C, tornando o código mais limpo e conveniente.
import Foundation // Inclui Foundation e permite usar tipos NS
let nsString: NSString = "Olá do Swift" // Objeto NSString
let swiftString: String = nsString as String // NSString é convertido automaticamente em String
let swiftArray: [Int] = [1, 2, 3] // Array Swift
let nsArray: NSArray = swiftArray as NSArray // Array Swift convertido automaticamente em NSArray
// Exemplo de uso de NSString numa função que espera um String (e vice-versa)
func printString(_ str: String) {
print(str)
}
printString(nsString as String) // Passa NSString, que espera um String
func printNSString(_ nsStr: NSString) {
print(nsStr)
}
printNSString(swiftString as NSString) // Passa String, que espera um NSString
A ponte entre Toll-free e Swift faz parte da estratégia geral da Apple para garantir compatibilidade entre Swift e código legado em Objective-C e C. Facilita significativamente a migração e integração de novo código Swift em projetos existentes.