Ошибка компоновщика при использовании Swift ObservableObject из Objective-C

#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 — работает нормально.