如何将Swift结构/枚举合并到Objective-C中?

时间:2014-11-21 23:48:59

标签: objective-c swift struct enums

场景:我已经通过.h网桥将Objective-C文件暴露给Swift;所以我可以从.Swift通过Storyboard启动Objective-C。

然而, 我有一些全球性的枚举和在ObjC需要的Environment.Swift文件中声明的结构:

enum BarButtonItem:Int {
    case cancel = 1
    case back
    case save
    case activate
    case upload
    case share
}

在Swift中访问枚举:

  @IBAction func navButtonAction(sender: UIBarButtonItem) {
        if let buttonItem = BarButtonItem(rawValue: sender.tag) {
            switch buttonItem {
            case .save:
                println("{(3.3)AccessBoundaries} Save.")
            default:
                println("")
            }
        }
        self.dismissViewControllerAnimated(true, completion: nil)
    }

我想在Objective-C文件中访问此(和其他数据类型):

- (IBAction)barButtonAction:(UIBarButtonItem *)sender {
    BarButtonItem....?
}

Xcode没有意识到这一点。

如何将.Swift文件中定义的环境数据类型(或我可以吗?)暴露给Objective-C文件?
......并且,是否有可能在Objective-C中解释.Swift的结构? enter image description here

1 个答案:

答案 0 :(得分:6)

有许多Swift功能无法在Objective-C中使用。前几天我发布了answer to a question的问题。我会在这里重新发布答案:

根据关于Swift和Objective-C兼容性的Apple's docs

  

您可以访问类或协议中的任何内容   标有@objc属性,只要它兼容   Objective-C的。此 排除了 仅限Swift的功能,例如列出的功能   这里:

     
      
  • 泛型
  •   
  • 元组
  •   
  • Swift中定义的枚举
  •   
  • Swift中定义的结构
  •   
  • Swift中定义的顶级函数
  •   
  • 在Swift中定义的全局变量
  •   
  • Swift中定义的Typealiases
  •   
  • Swift式variadics
  •   
  • 嵌套类型
  •   
  • 咖喱功能
  •