gpt4 book ai didi

swift - "Use of unresolved identifier"对隐式 setter 上的选择器使用新的 Swift 2.2 语法

转载 作者:搜寻专家 更新时间:2023-10-31 22:06:46 27 4
gpt4 key购买 nike

将我的代码迁移到 Swift 2.2,我有一个属性 var activeTextField:UITextfield? 并且我使用的选择器是 "setActiveTextField:"。此方法在我的 swift 代码中不明确存在。

使用新语法,#selector(setActiveTextField) 不起作用:Use of unresolved identifier

我知道我可以使用 Selector("setActiveTextField:") 但我会失去新的快速选择器的好处。

那么,这样做的新方法是什么?

最佳答案

这里的问题是您使用的是属性,而不是方法。这有两个问题:

  • 属性的 ObjC setter/getter 方法对在运行时生成。
  • #selector 表达式需要 Swift 函数/方法引用。

当 Swift 编译您的源代码时,它不知道 ObjC -(UITextField*)activeTextField-(void)setActiveTextField:(UITextField*)field 方法将存在,因此它无法为它们生成函数引用。由于它无法生成函数引用,因此它没有可用于 #selector 表达式的内容。

目前,没有办法使用 #selector 来访问属性 getter/setter — 使用带有字符串常量的 Selector(...) 是你的方法唯一的选择。

(这实际上只是一个长期存在的已知问题的新面孔......这与您不能将属性 getter/setter 传递给 mapfilter 之类的东西的原因相同。我想我已经在 http://bugs.swift.org 上看到过关于此的内容,但我目前没有找到。)

关于swift - "Use of unresolved identifier"对隐式 setter 上的选择器使用新的 Swift 2.2 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36159061/

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