【发布时间】:2016-06-02 21:12:47
【问题描述】:
我正在尝试通过添加 registerGestureRecognizers 函数来扩展 Swift 中的协议。这是完整的实现。
FilterableView 由继承自 UIImageView 的类使用。
import UIKit
protocol FilterableView : class {
var name :String { get }
var view :UIImageView { get }
func applyFilter(originalImage :UIImage) -> UIImage
}
extension FilterableView {
func registerGestureRecognizers() {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:)))
}
func filterTapped(recognizer :UITapGestureRecognizer) {
print("filter Tapped")
}
}
在这一行:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:)))
我收到以下消息:
Argument of '#selector' refers to a method that is not exposed to Objective-C
我错过了什么?
我添加了@objc 关键字,但同样的问题。
更新 2:
现在,我的类中存在符合 FilterableView 协议的问题。 Xcode 抱怨我必须在我的类中实现 filterTapped 函数,即使我已经在协议扩展方法中提供了实现。
【问题讨论】:
-
您在协议中添加了错误的功能。你应该添加
func filterTapped(recognizer :UITapGestureRecognizer) -
是的,由于某种原因,您将
#selector(Self.filterTapped(_:))更改为#selector(filterTapped)请不要更改代码的正确部分。 -
试试
FilterableView.filterTapped(_:) -
你解决过这个问题吗?