Каков правильный синтаксис для доступа к функции из 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;