Экспорт Swift Framework для использования в Objective-C - PullRequest
0 голосов
/ 02 января 2019

Я создаю фреймворк с использованием Swift для использования в проекте Objective-C моего колледжа. Я создал новый проект и выбрал Cocoa Touch Framework и назвал его printFramework . Я добавил в проект файл Swift с кодом ниже:

import Foundation


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

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

Я создаю приведенный выше код (Build Success) с целевым Универсальным устройством iOS , и теперь у меня есть файл портфеля (framework) и в разделе Product, и я создаю другой проект Single View Application с языком Objective-C с именем prinFrameTest . Я скопировал фреймворк в проект и на вкладке Общие в Связанные фреймворки и библиотеки , у меня есть printFramwork и выше в Встроенные бинарные файлы Я добавил свои printFramework .

В моем ViewController.m есть следующий код:

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

@interface ViewController ()

@end

@implementation ViewController

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

@end

Я собираю и запускаю это (он успешно работал), Симулятор открывается, но код не работает (значит, он ничего не печатает в журнале).

Что не так?

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Если вы поместите точку останова в строку [pr printMe] и проверите значение pr, вы, вероятно, увидите, что это нулевая ссылка - вы не создали объект, вы просто выделили переменную, котораяможет содержать ссылку на экземпляр printClass.Попробуйте так:

[[printClass new] printMe];
0 голосов
/ 03 января 2019
  1. Вам нужно использовать [[YourClass alloc] init], чтобы заставить его работать
  2. в проекте Xcode, вам нужно включить Always embed Swift standard libraries
  3. Здание с Generic iOS Device не дает универсального каркаса
0 голосов
/ 02 января 2019

Вам необходимо создать объект не ноль либо

printClass *pr = [printClass new];

ИЛИ

printClass *pr = [[printClass alloc] init];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...