gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:38:46 24 4
gpt4 key购买 nike

我有一个符合 Objective-C 协议(protocol)的类,并且有一个与其参数类型之一同名的函数。

class MessageDataController: NSObject, MCOHTMLRendererDelegate {
@objc func MCOAbstractMessage(msg: MCOAbstractMessage!, canPreviewPart part: MCOAbstractPart!) -> Bool {
return false
}
}

这会导致 Xcode 报错

"Use of undeclared type '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 method 'MCOAbstractMessage:canPreviewPart:' provided by method 'abstractMessage(:canPreviewPart:)' conflicts with optional requirement method 'MCOAbstractMessage(:canPreviewPart:)' in protocol 'MCOHTMLRendererDelegate'"

最佳答案

这可以通过在参数列表中使用完全限定的类型名称来解决。我不熟悉您正在使用的库,但下面的建议假定类型 MCOAbstractMessage 是在名为 MCO 的模块中声明的。在类型名称前添加 MCO.

class MessageDataController: NSObject, MCOHTMLRendererDelegate {
@objc func MCOAbstractMessage(msg: MCO.MCOAbstractMessage!, canPreviewPart part: MCOAbstractPart!) -> Bool {
return false
}
}

我通过在我的一个类中添加一个名为 Array 的方法来对此进行测试。果然它在我使用 Array 作为类型的任何其他地方都抛出了编译器错误。我将所有这些前缀为 Swift.Array,一切正常。

如果你想要一个更短的版本,使用类型别名,

关于ios - 不能有与参数类型同名的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33553632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com