【问题标题】:"ProductModuleName-Swift.h" not exporting all Swift classes“ProductModuleName-Swift.h”未导出所有 Swift 类
【发布时间】:2014-10-25 16:09:21
【问题描述】:

我在我的 Xcode 项目中定义了两个 Swift 类。其他一切都是Objective-C。

要使用 Objective-C 中的类,我尝试导入 ProductModuleName-Swift.h,但该文件仅包含 Swift 类之一的定义。 (SearchViewController)

这个类正在被导出:

class SearchViewController : UIViewController {

但这不是:

public class Socket {

【问题讨论】:

    标签: objective-c xcode swift xcode6


    【解决方案1】:

    来自“Using Swift with Cocoa and Objective-C”文档中的"Migrating Your Objective-C Code to Swift"

    • 要在 Objective-C 中可访问和可用,Swift 类必须是 Objective-C 类的后代,或者必须标记为 @objc。

    • 当您将 Swift 代码引入 Objective-C 时,请记住,Objective-C 将无法翻译某些功能 特定于斯威夫特。如需列表,请参阅"Using Swift from Objective-C"

    SearchViewController 是 Objective-C 类的后代,但 Socket 不是。 要使其在 Objective-C 中可用,请将其声明为 NSObject 的子类:

    public class Socket : NSObject { ...
    

    或声明为

    @objc public class Socket { ...
    

    【讨论】:

    • 谢谢。我一定忽略了这一点。
    • 我要补充一点,声明为 NSObject 的子类更好。如果你不这样做,你就不能这样做[[Socket alloc] init]
    • @wumm:很好,allocNSObject 类的一个方法。 - (@objc 声明将与 Swift 类中定义的类/工厂初始化程序一起使用。)
    • 那么在 Obj-C 中使用的 swift 函数和公共扩展声明呢?
    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多