我试图通过添加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")
}
}
Run Code Online (Sandbox Code Playgroud)
在这一行:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:)))
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
Argument of '#selector' refers to a method that is not exposed to Objective-C
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我添加了@objc关键字,但问题相同.
更新2:
现在,我在符合FilterableView协议的类中遇到问题.Xcode抱怨我必须在我的类中实现filterTapped函数,即使我已经在协议扩展方法中提供了实现.
重新编辑:您在协议中添加了错误的函数。加func filterTapped(recognizer: UITapGestureRecognizer)不func registerGestureRecognizers()。
@objc protocol FilterableView: class {
var name: String { get }
var view: UIImageView { get }
func applyFilter(originalImage: UIImage) -> UIImage
func filterTapped(recognizer: UITapGestureRecognizer)
}
extension FilterableView {
func registerGestureRecognizers() {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:)))
}
func filterTapped(recognizer :UITapGestureRecognizer) {
print("filter Tapped")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |