如何将Swift结构作为参数传递给Objective-C方法
我有一个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) //
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子类化。