我有一个符合Objective-C协议的类,并且有一个与其参数类型相同的函数。
class MessageDataController: NSObject, MCOHTMLRendererDelegate {
@objc func MCOAbstractMessage(msg: MCOAbstractMessage!, canPreviewPart part: MCOAbstractPart!) -> Bool {
return false
}
}
这会导致Xcode发出错误
"使用未申报的类型' MCOAbstractMessage'"
使用MCOAbstractMessage
作为函数名和参数类型。如果我将函数名称更改为abstractMessage
或类似名称,则不会出错。我认为该问题与this question和/或this issue有关,但我不确定如何解决。我的项目头文件已正确配置为使用MailCore2
。
尝试将声明更改为:
@objc(MCOAbstractMessage:canPreviewPart:) func abstractMessage(msg: MCOAbstractMessage!, canPreviewPart part: MCOAbstractPart!) -> Bool
给出错误
"〜/ src / project / MessageDataController.swift:11:52:Objective-C方法' MCOAbstractMessage:canPreviewPart:'方法提供' abstractMessage(:canPreviewPart :)'与可选的需求方法冲突' MCOAbstractMessage(:canPreviewPart :)'在协议' MCOHTMLRendererDelegate'"
答案 0 :(得分:0)
这可以通过在参数列表中使用完全限定类型名称来解决。我不熟悉您正在使用的库,但下面的建议假定类型MCOAbstractMessage
在名为MCO
的模块中声明。将MCO.
添加到类型名称。
class MessageDataController: NSObject, MCOHTMLRendererDelegate {
@objc func MCOAbstractMessage(msg: MCO.MCOAbstractMessage!, canPreviewPart part: MCOAbstractPart!) -> Bool {
return false
}
}
我通过在我的一个类中添加一个名为Array
的方法来测试它。当然,它在我使用Array
作为类型的其他地方抛出了编译器错误。我将所有这些作为Swift.Array
加上前缀,一切都很顺利。
如果您想要更短的版本,请使用typealias