Pesquisar

quinta-feira, 13 de setembro de 2018

Como chamar código Objective-C usando o Swift

Existem muitas dúvidas se conseguimos combinar em um projeto iOS totalmente escrito em Swift com trechos de código em Objective-C (ObjC). Essa foi uma das primeiras dúvidas quando a Apple lançou a linguagem Swift e até hoje existe esse questionamento, visto que muitas bibliotecas/frameworks foram criadas utilizando o ObjC e até mesmo código legado.



Etapa 1 - Inserindo código em ObjC

Como vocês podem ver, o projeto SwiftObjc foi criado para trabalhar "somente" com Swift:


O primeiro passo que precisamos realizar é criar um arquivo novo do tipo Objective-C - .m:



Ao clicar em Finalizar/Finish, irá aparecer no Xcode a seguinte tela:


Perguntando se deseja configurar/criar um Bridging Header do seu código em ObjC - nesse caso o arquivo User.m. Clique em Criar ou Create Bridging Header e irá aparecer em seu projeto os arquivos: User.m e SwiftObjc-Bridging-Header.h:


Importante: o arquivo Bridging-Header.h recebe como prefixo o nome que foi dado ao projeto.

Em Build Settings no Target do seu projeto, procure pelo termo Bridging Header e observe se o caminho para o arquivo encontra-se configurado:


Se não tiver, basta digitar o caminho até o arquivo .h:


Etapa 2 - Importando código Objective-C

A primeira coisa a fazer é importar o objeto User, mas para isso, precisa possuir uma interface. Crie um arquivo Header File da mesma forma que foi feita para o .m no projeto:


Veja como ficou o código em Objective-C:

//
//  User.h
//  SwiftObjc
//
//  Created by Gera on 13/09/2018.
//  Copyright © 2018 Geraldo Bastos. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface User: NSObject

@property (strong, nonatomic) NSString *name;

- (void) showName;
@end

//
//  User.m
//  SwiftObjc
//
//  Created by Gera on 13/09/2018.
//  Copyright © 2018 Geraldo Bastos. All rights reserved.
//

#import "User.h"

@implementation User

- (void) showName {
    NSLog(@"User: %@", self.name);
}

@end

Depois dessa etapa, você precisa fazer o import da classe que deseja usar em seu código Swift:

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "User.h"

Etapa 3 - Utilizando ObjC com Swift

Agora basta usar o objeto User em seu código escrito em Swift:

//
// ViewController.swift
// SwiftObjc
//
// Created by Gera on 13/09/2018.
// Copyright © 2018 Geraldo Bastos. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.createUser()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func createUser() {
let user = User()
user.name = "Bruce Wayne - 🦇"
user.showName()
}
}

Você pode fazer o download do projeto utilizado no arquivo clicando aqui para baixar em meu GitHub.