Sobes.tech
Middle+

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 <=> String
  • CFArrayRef <=> NSArray <=> Array
  • CFDictionaryRef <=> NSDictionary <=> Dictionary
  • CFDateRef <=> 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.