Swift para desarrollo de iOS (15): Swift y Objective-C combinados

versión

Xcode 11.3.1
Swift 5.1.3

Swift llama a Objective-C

Cree un nuevo proyecto Swift y luego cree un nuevo archivo Objective-C, y luego aparecerá un mensaje de archivo de conector de puente (si no es un archivo nuevo, sin este mensaje, podemos crearlo nosotros mismos, como se describe más adelante). :
Crear un archivo de junta de puente
Créelo, y luego habrá más archivos de encabezados:
Tabla de contenido

Person.h :

@interface Person : NSObject

- (void)sayHello;

@end

Persona.m:

#import "Person.h"

@implementation Person

- (void)sayHello {
    
    
    printf("Person say hello\n");
}

@end

Cite el archivo de encabezado OC en el archivo SwiftAndOC-Bridging-Header.h:

#import "Person.h"

Primero compile con ⌘ + B, y luego puede hacer referencia al objeto OC en ViewController.swift:

import UIKit

class ViewController: UIViewController {
    
    

    override func viewDidLoad() {
    
    
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        let person = Person()
        person.sayHello()
    }

}

Ejecútelo e imprima:

Person say hello

Objective-C llamar a Swift

Cree un nuevo archivo Cat.swift:

import UIKit

class Cat: NSObject {
    
    

    @objc func sayHello() {
    
        // @objc的作用后文介绍
        print("Cat say hello")
    }
}

Primero compila ⌘ + B, y luego queremos llamarlo en Person.m, necesitamos introducir el archivo de encabezado SwiftAndOC-Swift.h:

#import "Person.h"
#import "SwiftAndOC-Swift.h"

@implementation Person

- (void)sayHello {
    
    
    printf("Person say hello\n");
    
    Cat *cat = [[Cat alloc] init];
    [cat sayHello];
}

@end

SwiftAndOC-Swift.h es un archivo creado por el sistema y se presentará más adelante.

Ejecútelo e imprima:

Person say hello
Cat say hello

Análisis simple

1. XXX-Bridging-Header.h
Cuando necesitamos citar OC en Swift, necesitamos importar el archivo .h de OC en el archivo puente de XXX-Bridging-Header.h.
Si no es un archivo OC nuevo, el sistema no nos ayudará a crear el archivo puente, entonces necesitamos crear el archivo puente manualmente.
crear un nuevo archivo:
Crear archivo de encabezado

Luego, asígnele el nombre XXX-Bridging-Header.h (XXX es generalmente el nombre de su proyecto). Complete el nombre del archivo que acaba de crear en la columna Encabezado puente de Objective-C en TARGETS:
Archivo puente asociado.png

2. XXX-Swift.h
Cuando necesitamos citar Swift en OC, necesitamos importar el archivo XXX-Swift.h.
Y este archivo lo crea el sistema para nosotros. En la siguiente columna de nuestro archivo puente autoconstruido en la imagen de arriba, hay un SwiftAndOC-Swift.h, este archivo lo crea el sistema para nosotros y no necesitamos cambiar este archivo. Podemos mantener presionada la tecla then y luego hacer clic en este archivo para ver el contenido que contiene.
Puede ver que la persona de la clase OC original se ha convertido en un tipo Swift:

SWIFT_CLASS("_TtC10SwiftAndOC3Cat")
@interface Cat : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

Pero en este momento no existe el método sayHello. También necesitamos agregar la palabra clave @objc delante de la función Swift referenciada:

class Cat: NSObject {
    
    

    @objc func sayHello() {
    
    
        print("Cat say hello")
    }
}

De esta forma, la función Swift original se transforma en el método OC en XXX-Swift.h. Verifique XXX-Swift.h nuevamente después de la compilación:

SWIFT_CLASS("_TtC10SwiftAndOC3Cat")
@interface Cat : NSObject
- (void)sayHello;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

Ahora, entendemos por qué lo compilamos antes de hacer referencia a los demás. Porque solo después de la compilación, el sistema dará un mensaje de asociación cuando escribamos el código:
Asociación prompt.png

Supongo que te gusta

Origin blog.csdn.net/u012078168/article/details/104653540
Recomendado
Clasificación