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

Edw*_*hak 10 struct objective-c swift

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

ObjcClass.m 文件:

@implementation ObjcClass
+ (void)addListener:(id)listener {
    // Do something with listener
}
Run Code Online (Sandbox Code Playgroud)

DemoStruct.swift 文件:

struct DemoStruct {
    func registerAsListener() {
        ObjcClass.addListener(self) // Can't find a way to do this
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误消息:

类型'DemoStruct'不符合协议'AnyObject'

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

jrt*_*ton 12

你不能这样做.

从Objective-C无法访问Swift结构.这在Apple的"使用Swift With Cocoa和Objective-C"一书中有所说明:

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

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

摘录自:Apple Inc."将Swift与Cocoa和Objective-C结合使用."iBooks.https://itun.es/gb/1u3-0.l


Edw*_*hak 12

我找到的最好的东西是包装在Box类中

public class Box<T> {
    let unbox: T
    init(_ value: T) {
        self.unbox = value
    } }
Run Code Online (Sandbox Code Playgroud)