Каков правильный синтаксис для доступа к функции из ObjC в пакет Swift?

Простой сценарий: я хочу вызвать любую функцию-член пакета Swift из Objective-C.

Я создаю приложение для справки / демонстрации / проверки концепции, чтобы смешать ObjC с Swift.

Вот рабочий фрагмент со стороны Swift:

      import Foundation
import RicPackage

final class Greetings: NSObject {
    @objc public static let shared = Greetings()
    private override init() {}
    
    @objc public func doSomething(name: String) {
        print("Do something, \(name)")
        let ricClass = RicClass()
        ricClass.sayHello()
    }
    
    @objc public func hello() {
        print("Hello Everybody!")
    }
}

Вот сторона Objective-C:

      #import "ViewController.h"
#import "ObjcSwiftHeader-Swift.h"

@class RicClass;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"Inside VC ViewDidLoad.");
    Greetings *greetings = [Greetings shared];
    [greetings hello];
    [greetings doSomethingWithName: @"Ric"];
    
    RicClass *ricClass = [RicClass alloc];
}


@end

Я получил эту ошибку компилятора:

Вот снимок проекта:

Вот что такое Swift Package:

      import Foundation

public struct RicStruct {
    public private(set) var text = "Hello, World!"

    public init() {
    }
    
    public func sayHello() -> String {
        "Hello Ric!"
    }
}

public class RicClass: NSObject {
    @objc public var msg = "Mother has a feeling, I might be too appealing."
    @objc public let text = "Hello Everybody!"
    
    public override init() {}
  
    public func sayHello() {
            print(text)
        }
    
    public func doSomething() {
        print("Inside doSomething()")
    }
}

Должно быть простое решение ....

1 ответ

Пакеты связаны в ваше приложение как динамические встроенные фреймворки, и для их использования вы должны импортировать библиотеку пакета в исходный файл:

Быстрый:

      import RicPackage

Цель-C:

      @import RicPackage;
Другие вопросы по тегам