【发布时间】:2014-12-06 02:55:32
【问题描述】:
我目前正在编写一个框架来为我的 OS X 应用程序创建插件。这些插件被加载为NSBundles,并且捆绑包的principalClasses 用于运行插件代码。但是,我不知道如何声明 principalClass 对象符合我的协议。
let bundles = CFBundleCreateBundlesFromDirectory(kCFAllocatorDefault, NSURL(fileURLWithPath: bundleDirectory), "bundle") as NSArray
for bundle in bundles
{
let bundleClass = bundle.principalClass!!
if (bundleClass.conformsToProtocol(MyProtocol.self))
{
//Produces compiler error:
//"Cannot downcast from 'AnyClass' to non-@objc protocol type 'MyProtocol'"
let loadedClass = bundleClass as MyProtocol
}
}
声明它符合此协议的正确语法是什么?
(另外,这个协议被声明为@objc,所以我不知道为什么它说“非@objc”协议。)
【问题讨论】: