#ios #objective-c #swift #bridging-header #observableobject
#iOS #objective-c #swift #мостовой заголовок #observableobject
Вопрос:
Я пытаюсь использовать класс Swift из Objective-c (как я делаю для многих других классов) со следующей ошибкой.
Неопределенный символ: OBJC_CLASS$__TtC9FileCloud18BrowserCoordinator
Проблема, похоже, в том, что этот конкретный класс соответствует протоколу Swift ObservableObject
:
@available(iOS 13.0, *)
@objcMembers
class BrowserCoordinator: NSObject, ObservableObject
{
//...
}
Она правильно отображается в сгенерированном MyProject-Swift.h
файле заголовка:
SWIFT_CLASS("_TtC9FileCloud18BrowserCoordinator") SWIFT_AVAILABILITY(ios,introduced=13.0)
@interface BrowserCoordinator : NSObject
//...
@end
И правильно строится при использовании из Objective-C:
BrowserCoordinator* browser = BrowserCoordinator.new;
Но затем компоновщик выходит из строя. Может ли это быть ошибкой Apple?
Ответ №1:
Вот протестированная и отработанная демонстрация (с Xcode 12 / iOS 14)
Swift:
import SwiftUI
import Combine
@objcMembers
public class BrowserCoordinator: NSObject, ObservableObject
{
public func go() {
print(">> test")
}
}
Objective-C:
#import "MyViewController.h"
#import "TestBacktoObjC-Swift.h"
@interface MyViewController ()
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];
BrowserCoordinator* browser = BrowserCoordinator.new;
[browser go];
}
@end
Комментарии:
1. Только что протестирован с Xcode 11.7 / iOS 13.7 — работает нормально.