有没有办法在 Objective-C 中使用 Swift 结构而不将它们作为类?

2024-03-23

我有几个简单的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"
   }
...
}

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

我读过了:Objective C - Apple 的 Swift 互操作性 https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID35其中明确指出 Swift 编写的结构不能被 ObjectiveC 使用。 排除的有(以及其他功能):

Swift 中定义的结构体

解决方案一:

我找到了一个通过使用类解决问题的解决方案:

@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"
   }
...
}

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

Q1.除了解决方案 1 之外,还有其他方法可以在 ObjectiveC 中使用 Swift 结构吗?它不太适合我的项目/情况? (如果 rawValue 为 Int,则可以使用枚举)

Q2。有没有办法使用 #define SomeConst 进行 Objective C 访问,使用 struts 进行 Swift 访问,例如:

#if macOS // if Swift?
#endif

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

@objcMembers public class Car: NSObject {
    public var mileage: NSNumber?
}

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

注意:确保类类型是NSObject.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 Objective-C 中使用 Swift 结构而不将它们作为类? 的相关文章

  • 为什么不使用 Interface Builder [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 ios wifi 网络上查找对等点

    我试图弄清楚如何搜索登录到 wifi 网络且在特定端口上托管应用程序的其他设备 在不知道这些其他设备的地址甚至不知道它们托管的端口的情况下 如何检测它们的存在 一旦发现 我应该能够联系该设备并与其建立连接 最标准的 iOS方式 是使用Bon
  • Swift callkit 有时无法在接听电话后激活扬声器(仅限来电)

    在关注 Marco评论后 我更新了如下代码 但仍然无法正常工作 扬声器有时无法启用 在报告新呼叫 用户接受的呼叫之前 我调用了以下 2 种方法 configureAudioSessionToDefaultSpeaker func confi
  • iOS 意外的平台状况(预期的“os”、“arch”或“swift”)-可达性

    我刚刚更新了我的 pod 更新后Reachability导致错误 意外的平台状况 预期的 os arch 或 swift I tried to build and clean but it does not work what s the
  • 如果 UIGestureRecognizer 触发,如何取消按钮点击?

    更新 问题似乎是对另一个 GestureRecognizer 的依赖失败 请参阅此问题下面的评论和测试项目 在我的 iPhone 应用程序中 我有一个包含多个 UIButtons 作为子视图的视图 该视图还有一个 UITapGestureR
  • 如何解决创建 SwiftData #Predicate 的编译器错误?

    我一直在尝试很多方法来解决这个问题 我正在尝试使用谓词获取 SwiftData 记录 但我尝试的一切都会导致两个错误 初始化程序 init 要求 Item 符合 Encodable 初始化程序 init 要求 Item 符合 Decodab
  • 在 Swift 中使用 Obj-C 完成块

    在 Objective C 中 我有一个完成块类定义为 File h typedef void MYCompletionBlock BOOL success NSDictionary result NSError error 然后 在 Sw
  • 文档 Main.storyboard 需要 Xcode 8.0 或更高版本

    我下载了 Xcode beta 并打开了现有的项目 看看它如何与 Xcode 8 beta 一起使用 我从 Xcode 8 打开了 Storyboard 文件 现在 当我从 Xcode 7 3 打开项目时 我无法打开故事板文件 它给出了以下
  • SwiftUI 转义闭包捕获变异的“self”参数

    我有一个可以通过两种方式打开的视图 一个包含提供给它的数据 另一个包含对 Firestore 文档的文档引用 我创建了两个构造函数 在第一个构造函数中我提供数据 在另一个构造函数中我提供文档参考 然后我使用此引用进行网络调用 但出现错误 E
  • NSPredicate 格式字符串不起作用

    在我的代码中 我想检查记录是否已存在 以便我知道是创建它还是更新它 但我遇到了一个问题 问题是当我使用这个时 NSPredicate pred NSPredicate predicateWithFormat ATTRIBUTE ID idN
  • 如何在UIWindow中添加视图?

    我想添加一个视图UIWindow与以下代码 AppDelegate delegate AppDelegate UIApplication sharedApplication delegate UIWindow window delegate
  • Objective C - 动态属性的respondsToSelector

    我目前面临的问题是检查对象 NSManagedObject 的属性是否存在 不幸的是方法 MyObject class respondsToSelector selector myProperty 总是返回NO 我认为这是因为CoreDat
  • 如何缓存单元格并重用每个单元格中嵌入了 avplayers 的集合视图中的单元格?

    基本上我想做的是缓存单元格并让视频继续播放 当用户滚动回到单元格时 视频应该只从播放的位置显示 问题是玩家被移除并且单元格最终出现在随机单元格上 而不是其指定区域 您需要有两个视频才能正常工作 我从这里下载了视频https commonda
  • Xcode 4:获取请求模板变量?

    在 Xcode 3 X 中 您应该右键单击获取请求模板的谓词编辑器中的空白来指定变量输入而不是硬编码谓词 这是 XCode 4 中的哪里 我已经按住了选项 右键单击 选项单击等 但无法弄清楚 我认为X4不再有变量了 相反 我认为您必须选择一
  • 如何在 Swift 中更改 UIButton 图像

    我正在尝试使用 Swift 更改 UIButton 的图像 我应该怎么办 这是 OBJ C 代码 但我不知道 Swift 的情况 playButton setImage UIImage imageNamed play png forStat
  • Swift 中 flatMap 和 CompactMap 的区别

    似乎在斯威夫特 4 1 flatMap已弃用 不过有一个新的方法斯威夫特 4 1 compactMap哪个在做同样的事情 和flatMap您可以转换集合中的每个对象 然后删除任何为零的项目 喜欢平面地图 let array 1 2 nil
  • 如何在 Objective-C 标头中引用 Swift 枚举

    有没有办法从 Objective C 标头引用 Swift 枚举 如果你想在 Objective C 头中查看 Swift 类 你可以使用 objc class Foo 我没有看到枚举有任何类似的东西 你想做的事情叫做forward dec
  • NSDate 休息 5 小时

    我运行以下代码 NSDate now NSDate 日期 NSLog now now 并得到 2011 09 16 16 14 16 434 iSavemore 1229 7907 现在 2011 09 16 21 14 16 0000 如
  • Objective-C 字符串文字的预处理器宏值

    我在构建设置中定义了一个预处理器宏 FOO BAR 我想将该值转换为可以传递给方法的 Objective C 字符串文字 以下 define 不起作用 但它应该展示我想要实现的目标 define FOOLITERAL FOO want FO
  • iOS 13 UIActivityViewController 在图像保存后自动呈现以前的 VC

    我正在尝试实现 将图像保存到库 功能 然后返回到当前视图控制器 但在新的 iOS 13 上 它会返回到呈现当前视图控制器的视图控制器 PHPhotoLibrary requestAuthorization status PHAuthoriz

随机推荐