1
votes

Exporter le framework Swift pour l'utilisation en Objective-C

Je crée un cadre en utilisant Swift à utiliser dans le projet Objective-C de mon collège. J'ai créé un nouveau projet et j'ai choisi Cocoa Touch Framework et l'ai nommé printFramework . J'ai ajouté un fichier Swift dans le projet avec le code ci-dessous:

#import "ViewController.h"
@import printFramework;
#import <printFramework/printFramework-Swift.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    printClass *pr;
    [pr printMe];
}

@end

Je construis le code ci-dessus (Build Success) avec le périphérique iOS générique cible, et maintenant J'ai un fichier porte-documents (cadre) et sous Produit, et je crée un autre projet Application à vue unique avec le langage Objective-C nommé prinFrameTest . J'ai copié le framework dans le projet et dans l'onglet Général sous Cadres et bibliothèques liés , j'ai mon printFramwork et au-dessus dans Embedded Binaires J'ai ajouté mon printFramework

Dans mon ViewController.m j'ai le code suivant:

import Foundation


@objc public class printClass : NSObject {
    @objc public override init() {
        print("My name is init")
    }

    @objc public func printMe(){
        print("Hello Wrold")
    }
}

J'ai construit et exécuté ceci (il s'est exécuté avec succès), le simulateur s'ouvre et mais le code ne fonctionne pas (cela signifie qu'il n'imprime rien dans le journal).

Qu'est-ce qui se passe faux?


7 commentaires

commencer les noms de cours avec des majuscules


@Sh_Khan a essayé et cela n'a pas fonctionné BTW merci pour le commentaire


voir ci-dessous répondre ce commentaire n'est pas pertinent, vous pouvez reconstruire le frameWork après avoir changé le nom de la classe, mais pour l'instant le tester tel quel


La commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation) pour le code ci-dessous


@Sh_Khan modifie ma question, tu veux dire?


essayez la réponse modifiée ci-dessous


essayé et même erreur: -1: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation). @Sh_Khan


3 Réponses :


0
votes

Vous devez créer un objet non nul soit

printClass *pr = [[printClass alloc] init];

OU

printClass *pr = [printClass new];


0 commentaires

1
votes

Si vous mettez un point d'arrêt sur la ligne [pr printMe] et inspectez la valeur de pr , vous verrez probablement que c'est une référence nulle - vous n'avez pas ' t créé l'objet, vous venez d'allouer une variable qui peut contenir une référence à une instance de printClass . Essayez de cette façon:

[[printClass new] printMe];


7 commentaires

obtenir la même erreur de la réponse Sh_Khan:: -1: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)


@UncleJunior: Je pense que c'est une erreur d'importer un framework dans votre projet. J'ai vérifié avec ma démo et cela fonctionne bien. Vous pouvez vérifier comme: Dans votre projet en langage obj-c, ajoutez un fichier swift et ajoutez votre code swift dans ce fichier, puis ajoutez votre fichier swift dans le contrôleur obj-c #import "Nom de votre projet-Swift.h" puis cochez


@UncleJunior: Votre framework n'est pas parfaitement lié à votre projet de langage obj-c, c'est pourquoi vous obtenez cette erreur


C'est exactement la question, je dois en faire un cadre, et je veux savoir où est le problème en le liant à Obj-C


Avez-vous ajouté votre framework dans les binaires intégrés dans l'onglet général?


Oui, je l'ai fait au début et je l'ai déclaré dans la question


@UncleJunior: supprimez vos données dérivées et nettoyez votre projet puis construisez



1
votes
  1. Vous devez utiliser [[YourClass alloc] init] pour le faire fonctionner
  2. dans le projet Xcode, vous devez activer Toujours intégrer les bibliothèques standard Swift
  3. Construire avec un appareil iOS générique ne produit pas de cadre universel

2 commentaires

pour le numéro 2, je l'ai déjà fait avant et pour le numéro 3, que devrait-on mettre à la place du périphérique iOS générique?


@UncleJunior si vous incluez directement le projet, vous n'avez pas besoin de vous en soucier, mais si vous construisez en * .framework, vous devez construire pour toutes les architectures en utilisant run script (essayez ceci medium.com/allatoneplace/... )