Swift em Objective-C: instruções de importação para projetos híbridos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como importar código Swift em Objective-C: guia passo a passo com exemplos reais



Você já se encontrou em uma situação onde precisava adicionar um novo módulo Swift em um bom e velho projeto Objective-C? Ou, talvez, sua equipe esteja migrando gradualmente de Objective-C para Swift, mas por enquanto vocês são obrigados a trabalhar em modo híbrido? Se sim — você veio ao lugar certo. A pergunta «How can I import Swift code to Objective-C?» é uma das mais populares no Stack Overflow (dezenas de milhares de visualizações), e não é surpresa: mesmo desenvolvedores experientes às vezes se confundem na configuração da ponte entre as duas linguagens.



Neste artigo, vamos analisar como importar corretamente código Swift em Objective-C, quais armadilhas esperam por você e como não transformar seu projeto em um quebra-cabeça. Vamos lá!



Por que Swift e Objective-C ainda vivem juntos?



Muitos pensam que com a chegada do Swift todos abandonaram o Objective-C e migraram para a nova linguagem. A realidade é mais complexa. Milhares de projetos grandes (incluindo aplicativos de bancos, redes sociais e sistemas corporativos) são escritos em Objective-C, e reescrevê-los completamente é uma tarefa de anos. Por isso, a Apple previu um mecanismo de interação: você pode escrever novos recursos em Swift e deixar o código antigo em Objective-C.



O problema chave: Swift e Objective-C são mundos diferentes. Swift é compilado em seu próprio formato binário, Objective-C no seu. Para que eles «se vejam», é necessária uma ponte especial — bridging header para importar Objective-C em Swift, e um arquivo de cabeçalho gerado automaticamente para importar Swift em Objective-C.



Esquema de funcionamento: como Swift vê Objective-C e vice-versa



Vamos esclarecer logo a direção:



  • Objective-C → Swift: usamos o arquivo gerado ProductModuleName-Swift.h (onde ProductModuleName é o nome do seu módulo).
  • Swift → Objective-C: usamos o bridging header (ProjectName-Bridging-Header.h).


Hoje nos interessa a primeira opção. Mas para entender o quadro completo, é útil conhecer ambas.



Passo 1: Configuração do projeto para trabalho conjunto



Antes de importar código Swift em Objective-C, certifique-se de que seu projeto está configurado corretamente. Se você está criando um projeto do zero e já planeja uma arquitetura híbrida — é simples. Se o projeto já existia em Objective-C — é necessário adicionar suporte a Swift.



Verifique as configurações de Build Settings



Abra as configurações do seu target no Xcode e encontre o parâmetro «Defines Module». Ele deve estar definido como Yes. Se não estiver — adicione manualmente:



// Build Settings → Packaging → Defines Module = YES


Em seguida, encontre «Product Module Name» — este é o nome que será usado no arquivo de cabeçalho gerado. Por padrão, ele coincide com o nome do projeto, mas você pode alterá-lo (por exemplo, MyApp).



Crie o bridging header (se não existir)



Quando você adiciona um arquivo Swift pela primeira vez em um projeto Objective-C, o Xcode se oferecerá para criar um bridging header. Aceite. Se você perdeu esse momento — crie o arquivo manualmente: New File → Header File e nomeie-o como YourProjectName-Bridging-Header.h. Em seguida, indique o caminho para ele nas configurações:



// Build Settings → Swift Compiler - General → Objective-C Bridging Header// Exemplo: $(SRCROOT)/$(PROJECT_NAME)/YourProjectName-Bridging-Header.h


Passo 2: Escrevendo uma classe Swift que será acessível a partir do Objective-C



Nem toda classe Swift é automaticamente «vista» pelo Objective-C. Existem vários requisitos obrigatórios: