gpt4 book ai didi

快速替代 respondsToSelector :

转载 作者:可可西里 更新时间:2023-10-31 23:58:16 34 4
gpt4 key购买 nike

我试图实现 swift 的替代 respondsToSelector: 语法,该语法也显示在主题演讲中。

我有以下内容:

protocol CustomItemTableViewCellDelegate {
func changeCount(sender: UITableViewCell, change: Int)
}

然后在我调用的代码中

class CustomItemTableViewCell: UITableViewCell {

var delegate: CustomItemTableViewCellDelegate
...
override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
...
delegate?.changeCount?(self, change: -1)
}
...
}

我得到以下错误

  • 后缀 '?' 的操作数应该有可选类型;类型是
    '(UITableViewCell, change:Int) -> ()'
  • 后缀 '?' 的操作数应该
    有可选类型;类型是“CustomItemTableViewCellDelegate”
  • 不允许部分应用协议(protocol)方法

我做错了什么?

谢谢

最佳答案

您有两个 ? 运算符,它们都会导致问题。

首先,delegate 之后的那个表示您想要解包一个可选值,但是您的 delegate 属性并未以这种方式声明。应该是:

var delegate: CustomItemTableViewCellDelegate?

其次,您似乎希望您的 changeCount 协议(protocol)方法是可选的。如果这样做,您需要使用 @objc 属性标记协议(protocol)并使用 optional 属性标记函数:

@objc protocol CustomItemTableViewCellDelegate {
optional func changeCount(sender: UITableViewCell, change: Int)
}

(注意:符合 @objc 协议(protocol)的类本身必须是 @objc。在这种情况下,您正在子类化一个 Objective -C 类,所以你被覆盖了,但是一个新类需要用 @objc 属性标记。)

如果您只希望委托(delegate)是可选的(也就是说,没有委托(delegate)也可以,但是所有委托(delegate)都需要实现changeCount),那么请保持协议(protocol)不变并更改该方法调用:

delegate?.changeCount(self, change: -1)

关于快速替代 respondsToSelector :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24142906/

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