【问题标题】:Linker error when using Swift ObservableObject from Objective-C使用 Objective-C 中的 Swift ObservableObject 时出现链接器错误
【发布时间】:2020-12-21 17:55:36
【问题描述】:

我正在尝试使用来自 Objective-c 的 Swift 类(就像我对许多其他类所做的那样),但出现以下错误。

未定义符号: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 的 bug?

【问题讨论】:

    标签: ios objective-c swift bridging-header observableobject


    【解决方案1】:

    这是经过测试和工作的演示(使用 Xcode 12 / iOS 14)

    斯威夫特:

    import SwiftUI
    import Combine
    
    @objcMembers
    public class BrowserCoordinator: NSObject, ObservableObject
    {
        public func go() {
            print(">> test")
        }
    }
    

    目标-C:

    #import "MyViewController.h"
    #import "TestBacktoObjC-Swift.h"
    
    @interface MyViewController ()
    @end
    
    @implementation MyViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        BrowserCoordinator* browser = BrowserCoordinator.new;
        [browser go];
    }
    
    @end
    

    【讨论】:

    • 刚刚用 Xcode 11.7 / iOS 13.7 测试过 - 工作正常。
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多