如何将Swift结构作为参数传递给Objective-C方法

如何将Swift结构作为参数传递给Objective-C方法,objective-c,swift,struct,Objective C,Swift,Struct,我有一个Objective-C方法,它接受一个类型为id的参数,我想给它传递一个Swift结构 objclass.m文件: @implementation ObjcClass + (void)addListener:(id)listener { // Do something with listener } struct DemoStruct { func registerAsListener() { ObjcClass.addListener(self) //

我有一个Objective-C方法,它接受一个类型为
id
的参数,我想给它传递一个Swift结构

objclass.m
文件:

@implementation ObjcClass
+ (void)addListener:(id)listener {
    // Do something with listener
}
struct DemoStruct {
    func registerAsListener() {
        ObjcClass.addListener(self) // Can't find a way to do this
    }
}
DemoStruct.swift
文件:

@implementation ObjcClass
+ (void)addListener:(id)listener {
    // Do something with listener
}
struct DemoStruct {
    func registerAsListener() {
        ObjcClass.addListener(self) // Can't find a way to do this
    }
}
我得到的编译错误消息:

类型“DemoStruct”不符合协议“AnyObject”

所以我的问题是,我如何让Objective-C方法接受
Any
而不是
AnyObject
,有这样的事情吗?

你不能这样做

无法从Objective-C访问Swift结构。这在Apple的“将Swift与Cocoa和Objective-C一起使用”一书中有说明:

只要与Objective-C兼容,您就可以访问类或协议中标记有@objc属性的任何内容。这不包括此处列出的仅Swift的功能:

  • 仿制药
  • 元组
  • Swift中定义的枚举
  • Swift中定义的结构
  • Swift中定义的顶级功能
  • Swift中定义的全局变量
  • Swift中定义的类型别名
  • 快速式变量
  • 嵌套类型
  • 咖喱函数

摘自:苹果公司《将Swift与可可和Objective-C结合使用》iBooks

我发现最好的方法是用盒子包装

public class Box<T> {
    let unbox: T
    init(_ value: T) {
        self.unbox = value
    } }
公共类框{
让我们解开X:T
初始值(u值:T){
self.unbox=值
} }

谢谢@jrturton,有什么好方法可以绕过它?也许是一个虚拟包装器类?也许,或者是一个您可以传递的objc友好表示。这取决于您在objective-c中需要它做什么。实际上,对于枚举的功能可用性有一个修正:“在Swift中定义的枚举没有Int原始值类型”哇,这是一个优雅的解决方案。Xcode 7 beta 3。我必须将NSObject子类化。