【问题标题】:enum defined in Objc > Declared in Swift > to be used in Objc在 Objc 中定义的枚举 > 在 Swift 中声明 > 在 Objc 中使用
【发布时间】:2017-10-27 11:07:32
【问题描述】:

我有一个情况。如果有人对此有解决方案,我将不胜感激

  • 我有一个objC enumAbc
  • 我在一个 swift 类中声明这个,比如 MySwiftClass.swiftvar abc : Abc!
  • 我在另一个 ObjC 类(myObjC.m 文件)中创建了 MySwiftClass (mySwiftClass) 的实例
  • 在 myObjC.m 中,我尝试以 mySwiftClass.abc 的身份访问枚举 Abc。

这会引发错误 - “在 MySwiftClass * 类型的对象上找不到属性‘abc’”。 基本上枚举不会作为属性添加到“ProjectName-Swift.h”文件中。

我认为正在发生的事情是,当我在 Swift 类中声明 ObjC 枚举时,它会被转换为 swift 枚举,因此我无法在 ObjC 文件中访问它。

注意:将 Swift 类标记为 @objc 不起作用。

【问题讨论】:

    标签: objective-c swift enums objc-bridging-header


    【解决方案1】:

    数字 Swift 选项不能在 Objective-C 中表示,因此不会暴露给 Objective-C。声明 abc 不是可选的,它应该在 Objective-C 中可用。

    考虑一下这个 Objective-C 枚举:

    typedef NS_ENUM(NSInteger, Foo) {
        FooBar,
        FooBaz,
        FooQux
    };
    

    然后考虑这个 Swift 3 类:

    class SomeObject: NSObject {
        var foo1: Foo  = .bar          // this is exposed to Objective-C
        var foo2: Foo! = .bar          // this is not
    }
    

    非可选的 foo1 将暴露给 Objective-C,而可选的 foo2 不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2014-07-31
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      相关资源
      最近更新 更多