我已经声明了Swift协议:
protocol Option {
var name: String { get }
}
我声明了该协议的多种实现-一些类,一些枚举。
我有一个视图控制器,其属性声明为:
var options: [Option] = []
当我尝试将此属性设置为Option
在另一个VC 中实现协议的对象数组prepareForSegue
时,出现运行时错误:
fatal error: array cannot be bridged from Objective-C
为什么不起作用?编译器具有所需的所有信息,而我根本不了解Objective-C与它有什么关系-我的项目仅包含Swift文件,并且这些数组不会进出任何框架方法,必须将它们桥接到NSArray
。
如果任何协议实现都是枚举,那将不起作用:“非类类型'Foo'无法符合类协议'Option'”
—
Robert Atkins 2015年
为什么它必须是类协议?我没有将其传递给Obj-C框架或其他任何需要将Swift Array桥接到NSArray的东西。
—
罗伯特·阿特金斯
Swift和Objective-C一起工作的方式对我来说仍然是个秘密。我只需要“接受”很多“工作”或“不工作”的东西。
—
法比奥·波洛尼
为什么这个选票这么多?在我看来,这是一个公平而明确的问题。
—
2015年
@objc
协议?stackoverflow.com/a/28029568/377369