当前位置: 首页 > 面试题库 >

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

公良鸿禧
2023-03-14
问题内容

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

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’方法,属性或初始化程序。

很酷,所以我在handleTap签名中添加了@objc:

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

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

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


问题答案:

看来您误解了几件事。

使用target /
action时
,功能签名必须具有某种形式…

func doSomething(sender: Any)

要么

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

哪里…

sender参数是发送操作消息的控制对象。

在您的情况下,发件人是 UITapGestureRecognizer

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

func handleTap(sender: UIGestureRecognizer) {

}

你应该有…

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

假设func和手势位于视图控制器中,而视图控制器modelObj是一个属性/ ivar,则无需将其与手势识别器一起传递,您只需在handleTap



 类似资料:
  • 在Swift编程语言中,它说: 函数也可以接受可变数目的参数,将它们收集到数组中。 当我用逗号分隔的数字列表(`sumof(1,2,3,4)调用这样一个函数时,它们在函数中作为一个数组可用。 问题:如果我已经有一个数组要传递给这个函数,该怎么办? 这将失败,并出现编译器错误,“无法找到接受所提供参数的'__conversion'的重载”。有没有办法把一个现有的数组变成一个我可以传递给一个变量函数的

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 我最近开始学习Swift,遇到了一个关于闭包的问题。我试图将开车的参数传递给func travel并收到错误消息:无法将类型'()'的值转换为预期的参数类型'()- 有人能善意地建议吗?赞赏!

  • 例如,在具有分页列表的路由上,网址可能如下所示,表示我们已加载第二个网页: 使用指令和来传递查询参数。例如: 或者,我们可以使用服务通过JS跳转: 读取查询参数 See Official Documentation on Query Parameters

  • 问题内容: 在我的RCP应用程序中,左侧有一个用于导航的视图,右侧有一个用于视图的文件夹。透视图看起来像这样: 我想根据用户在导航树中选择的内容打开不同的视图。认为这并不难。我的导航树视图: 这似乎很好。仅有一个小问题:我需要以某种方式将对象(例如,selectedItem)传递给我的视图,以使用户与其内容进行交互。我怎么做? 我看到了一些示例,其中一些同事编写了自己的视图,并将其放置在右侧。然后