有没有一种方法可以在Objective-C中使用Swift结构而不将其设置为类?

Dar*_*der 5 frameworks cross-platform objective-c swift

structs在.swift文件中用swift编写了几个简单的文件。这些structs非常简单,几乎只包含字符串:

struct Letter {
   struct A {
      static let aSome : String = "descASome"
      static let aSomeMore : String = "descASomeMore"
   }
   struct B {
      static let bNow : String = "descBNow"
      static let bLater : String = "descBLater"
   }
...
}
Run Code Online (Sandbox Code Playgroud)

我想在包含Objective-C代码的项目中使用这些结构,因为我正在编写一个跨平台框架。

我读过:ObjectiveC-Apple的Swift互操作性,明确指出ObjectiveC不能使用Swift编写的结构。除其他功能外,不包括:

Swift中定义的结构

解决方案1:

我找到了一个SO解决方案,可以通过使用类来解决此问题:

@objc class Letter : NSObject {
   @objc class A : NSObject {
      static let aSome : String = "descASome"
      static let aSomeMore : String = "descASomeMore"
   }
   @objc class B : NSObject {
      static let bNow : String = "descBNow"
      static let bLater : String = "descBLater"
   }
...
}
Run Code Online (Sandbox Code Playgroud)

此解决方案有效,但是我必须将所有结构重写为类。它们也不像结构那样轻巧(除其他外)。此外,我觉得我会倒退解决问题。

Q1。除了解决方案1之外,还有什么其他方法可以在ObjectiveC内使用Swift结构,而该解决方案不太适合我的项目/情况?(如果原始值是Int,则可以使用枚举)

Q2。有没有一种方法可以将#define SomeConst用于ObjectiveC访问,将stucst用于Swift访问,例如:

#if macOS // if Swift?
#endif
Run Code Online (Sandbox Code Playgroud)

Sho*_*t C 4

截至目前,没有。您将需要类来存储模型对象。

@objcMembers public class Car: NSObject {
    public var mileage: NSNumber?
}
Run Code Online (Sandbox Code Playgroud)

@objcMember实际上将它们转换为 Objective-C 可读格式,并且可以从 Objective-C 类访问。这将使您的代码具有互操作性。

注意:确保类类型为NSObject