- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图实现 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/
当想要在委托(delegate)对象上调用协议(protocol)方法时,希望实现相应的协议(protocol)方法,我看到开发人员首先检查 if([delegate respondsToSelect
我试图实现 swift 的替代 respondsToSelector: 语法,该语法也显示在主题演讲中。 我有以下内容: protocol CustomItemTableViewCellDelegat
我目前正在使用 -respondsToSelector:,如下所示: if (![moviePlayer respondsToSelector:@selector(currentPlaybackTim
我正在编写自己的 gridview 实现(基于 tableview 模式)。我遵循了类似于 TableView 的数据源模型,但是当我检查数据源是否响应消息时,调用总是失败。 我已经尝试放置断点并在执
据我所知 respondsToSelector: 是 NSObject Protocol 的一个方法,但是对于协议(protocol)中的所有方法,符合该协议(protocol)的类需要提供实现,但我
在 UIViewController 的一个简单子(monad)类中,我只是实现了一个选择器作为刷新 UI 的回调 -(void)afterfollowAction:(id)object{ //b
假设我们有不同的对象,它们具有相同的方法名称但具有不同的参数类型,例如:getMethod:(NSNumber*)aNumber 和 getMethod:(NSString*)aString . 如何
如果我向 NSXML Parser 发送错误的 URL,我会尝试找出我的应用程序崩溃(RSS 阅读器)的原因。我有一个 EXC_BAD_ACCESS。因此,经过一番搜索后,我发现我必须使用 Zombi
是否有来自 Objective C 的 respondsToSelector: 方法的 Android 模拟? 最佳答案 在 Java 中,您通常期望在定义方法的地方有一些接口(interface)。
我正在按照苹果的示例代码来了解如何在 iOS 7 下实现收据验证,并且它有效,除非我在 iOS 6 下运行以下代码(基本上逐字地从他们的示例中获取) NSBundle *bundle =[NSBund
我用respondsToSelector检查的方法是否必须实际存在? 如果我只在接口(interface)部分定义而没有实现怎么办?我正在研究 Objective-C 中的穷人虚拟函数。 最佳答案 首
以下行编译正常但在 iOS 8 中错误地返回 false。为什么? [[NSLayoutConstraint class] respondsToSelector:@selector(setActive
如果类响应选择器,我正在寻找以动态方式检查的可能性。 例如,我在类中有一个严格的方法名称模式,如“parse[CountryCode]Adress”。 我尝试过这样的事情: SEL selector
我试图通过在 [UIBarButtonItem appearance] 上运行 respondsToSelector 来检测特定于 iOS 6 的外观方法。但是,无论我指定什么选择器,它总是为我返回
有没有等价于-respondsToSelector:的类方法? 类似于 +respondsToSelector:? 我问的原因是因为通过在类级别实现 -respondsToSelector:,我收到编
我已经实现了一个带有可选方法的协议(protocol),并且在我想发送的调用方法中 respondsToSelector:至self.delegate在我发送消息之前,但这不会编译。失败消息是: 选择
在内部,respondsToSelector 是否不仅仅是找出 class_getInstanceMethod 是否返回非零值? respondsToSelector 本质上是 class_getIn
在内部,respondsToSelector 是否不仅仅是找出 class_getInstanceMethod 是否返回非零值? respondsToSelector 本质上是 class_getIn
我正在转换 this Swift 的 Objective-C 开源项目。它有一堆可选的代表。 @protocol BEMAnalogClockDelegate @optional - (void)c
NSObject 的“响应”方法似乎在最新版本的 Xcode 9 Beta 4、Swift 4.0 版中被破坏。 下面是在 Xcode 8 上测试的示例代码(工作正常),在 Xcode 9 上,方法“
我是一名优秀的程序员,十分优秀!