不能具有与参数类型同名的函数

时间:2015-11-05 19:56:24

标签: ios objective-c swift mailcore2

我有一个符合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'"

1 个答案:

答案 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