gpt4 book ai didi

ios - 在 Swift 中将参数传递给选择器

转载 作者:行者123 更新时间:2023-11-30 12:16:16 25 4
gpt4 key购买 nike

我正在以编程方式将 UITapGestureRecognizer 添加到我的 View 之一:

let gesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(modelObj:myModelObj)))

self.imageView.addGestureRecognizer(gesture)

func handleTap(modelObj: Model) {
// Doing stuff with model object here
}

我遇到的第一个问题是“‘#selector’的参数没有引用‘@Objc’方法、属性或初始值设定项。

酷,所以我将@objc添加到handleTap签名中:

@objc func handleTap(modelObj: Model) {
// Doing stuff with model object here
}

现在我收到错误“方法无法标记@objc,因为参数的类型无法在 Objective-C 中表示。

这只是建筑物 map 的图像,其中有一些指示兴趣点位置的图钉图像。当用户点击这些图钉之一时,我想知道他们点击了哪个兴趣点,并且我有一个描述这些兴趣点的模型对象。我使用这个模型对象来为图钉图像提供 map 上的坐标,因此我认为将对象发送到手势处理程序会很容易。

最佳答案

看来您误解了一些事情。

当使用target/action时,函数签名必须具有一定的形式...

func doSomething()

func doSomething(sender: Any)

func doSomething(sender: Any, forEvent event: UIEvent)

哪里...

The sender parameter is the control object sending the action message.

在您的情况下,发送者是UITapGestureRecognizer

此外,#selector() 应包含 func 签名,并且不包含传递的参数。所以对于...

func handleTap(sender: UIGestureRecognizer) {

}

你应该……

let gesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))

假设 func 和手势在 View Controller 中,其中 modelObj 是一个属性/ivar,则无需将其与手势识别器一起传递,您只需在 handleTap

关于ios - 在 Swift 中将参数传递给选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403431/

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