Como chamar código Objective-C a partir de Swift: a amizade das linguagens no iOS

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

Objective-C e Swift: dois mundos, um projeto

\n\n

Você programa em Swift, mas tem à sua disposição uma biblioteca escrita em Objective-C, ou um código antigo, mas testado, em ObjC. Situação familiar? Não se preocupe: a Apple forneceu um mecanismo excelente para o trabalho conjunto dessas duas linguagens. Neste artigo, vamos entender como chamar código Objective-C a partir de Swift — de forma rápida, simples e sem dor de cabeça.

\n\n

Esta é uma das perguntas mais populares no Stack Overflow (milhares de visualizações e centenas de votos). E não é à toa: saber integrar Objective-C em Swift abre acesso a um enorme legado de bibliotecas e códigos escritos ao longo de décadas de desenvolvimento iOS. Vamos finalmente entender como isso funciona.

\n\n

O que é o Bridging Header e para que serve?

\n\n

O segredo da amizade entre Swift e Objective-C é um arquivo especial chamado Bridging Header (cabeçalho de ponte). É como um tradutor: ele informa ao Swift quais classes e funções em Objective-C estão disponíveis e como chamá-las corretamente.

\n\n

Quando você cria o arquivo de ponte, o compilador o reconhece automaticamente e torna todas as declarações do Objective-C visíveis no Swift. Basta importar os cabeçalhos ObjC neste arquivo — e pronto.

\n\n

Como criar um Bridging Header no Xcode

\n\n

A maneira mais fácil é deixar o Xcode fazer isso por você. Basta adicionar um novo arquivo Objective-C ao projeto (File → New → File → Objective-C File). O Xcode perguntará: "Deseja criar um Bridging Header?" — responda "Sim". Depois disso, um arquivo chamado YourProjectName-Bridging-Header.h aparecerá no projeto.

\n\n

Se você já está trabalhando em um projeto e deseja adicionar a ponte manualmente, faça o seguinte:

\n\n
    \n
  • Crie um novo arquivo de cabeçalho (File → New → File → Header File) e nomeie-o, por exemplo, MyProject-Bridging-Header.h.
  • \n
  • Nas configurações do projeto (Build Settings), encontre o parâmetro Objective-C Bridging Header e indique o caminho para o seu arquivo.
  • \n
\n\n

Pronto. Agora, tudo o que você escrever neste arquivo estará disponível no Swift.

\n\n

Escrevendo uma classe Objective-C e conectando-a ao Swift

\n\n

Vamos criar uma classe simples em Objective-C que cumprimenta o usuário. Primeiro, o arquivo de cabeçalho (Greeter.h):

\n\n
// Greeter.h\n#import <Foundation/Foundation.h>\n\n@interface Greeter : NSObject\n\n- (NSString *)greetWithName:(NSString *)name;\n\n@end\n
\n\n

E agora, a implementação (Greeter.m):

\n\n
// Greeter.m\n#import "Greeter.h"\n\n@implementation Greeter\n\n- (NSString *)greetWithName:(NSString *)name {\n    return [NSString stringWithFormat:@"Olá, %@! Prazer em conhecê-lo.", name];\n}\n\n@end\n
\n\n

Agora, o mais importante. Abra seu Bridging Header (por exemplo, MyProject-Bridging-Header.h) e adicione:

\n\n
// MyProject-Bridging-Header.h\n#import "Greeter.h"\n
\n\n

Pronto! Agora você pode usar a classe Greeter no Swift como se ela tivesse sido escrita em Swift:

\n\n
// ViewController.swift\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        let greeter = Greeter()\n        let message = greeter.greet(withName: "Alex")\n        print(message) // Exibirá: "Olá, Alex! Prazer em conhecê-lo."\n    }\n}\n
\n\n

Observe: o método greetWithName: no Swift é transformado em greet(withName:). Esta é uma adaptação automática dos nomes de métodos do Objective-C para o estilo Swift.

\n\n

Trabalhando com frameworks e bibliotecas Objective-C

\n\n

Frequentemente, você precisará conectar não o seu próprio código, mas uma biblioteca pronta em Objective-C (por exemplo, uma versão antiga do AFNetworking ou CocoaLumberjack). Aqui é ainda mais simples:

\n\n
    \n
  • Instale a biblioteca via CocoaPods, Carthage ou SPM.
  • \n
  • Importe os cabeçalhos dela no seu Bridging Header.
  • \n
  • Use

Blogs

Book Recommendations