gpt4 book ai didi

ios - Swift 中带有选择器的协议(protocol)扩展

转载 作者:IT王子 更新时间:2023-10-29 05:38:23 26 4
gpt4 key购买 nike

我正在尝试通过添加 registerGestureRecognizers 函数来扩展 Swift 中的协议(protocol)。这是完整的实现。

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 关键字但问题相同。

enter image description here

更新 2:

现在,我在符合 FilterableView 协议(protocol)的类中遇到了问题。 Xcode 提示我必须在我的类中实现 filterTapped 函数,即使我已经在协议(protocol)扩展方法中提供了实现。

最佳答案

重新编辑:您在协议(protocol)中添加了错误的函数。添加 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")
}

}

关于ios - Swift 中带有选择器的协议(protocol)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602198/

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