Swift框架嵌套类在Objective C中不能很好地导出

Col*_*ral 10 frameworks nested objective-c swift

我有Geography.framework(一个Swift框架项目)包含的以下类:

public class Contact : NSObject
{
    public static let  Table: String = "contacts"

    public class Fields : NSObject
    {
        public static let  Id: String = "_id"
        public static let  Name: String = "name"
        static let  rawId: String = "rawId"
    }
}


public class Country : NSObject
{
    public class Fields : NSObject
    {
        public static let  Id: String  = "_id"
        public static let  Prefix: String = "prefix"
        static let  rawId: String  = "rawId"
    }
}
Run Code Online (Sandbox Code Playgroud)

在我使用此框架的快速应用程序中,一切运行顺利:

import geography

func setFields()
{
    var contactName:String = Contact.Fields.Name
    var countryPrefix:String = Country.Fields.Prefix
    var contactsTable: String  = Country.Table
}
Run Code Online (Sandbox Code Playgroud)

好吧,如果我在ObjectiveC中使用相同的Geography.framework,我会看到Contact和Country类,但看不到嵌套类Fields.此外,没有看到Contact.Table的值.

我需要做什么才能在ObjectiveC中拥有相同的库结构和库使用?

谢谢,

Sta*_*ida 5

您必须在此处明确定义ObjC。

public class Country: NSObject {

    @objc(CountryFields) public class Fields: NSObject {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这会将您的ObjC的Country.FieldsSwitf暴露为CountryFields。我尚未测试过,但我相信您不必明确继承自NSObject@objc属性应在编译时为您完成。

Swift 3更新:

看起来这在Swift 3中已被破坏,无法修复。https://bugs.swift.org/browse/SR-2267?focusedCommentId=21033&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-21033

  • 在Swift 4.2中工作 (2认同)