Arrays 我可以使用数组中的字符串作为Swift中的选择器吗?
我正在尝试学习Swift——当前的任务是从包含字符串的对象数组中为Mac应用程序制作一个简单的菜单。现在的问题是如何传递选择器,它在数组中是一个字符串,但在代码中是一个函数 这个班是Arrays 我可以使用数组中的字符串作为Swift中的选择器吗?,arrays,swift,selector,Arrays,Swift,Selector,我正在尝试学习Swift——当前的任务是从包含字符串的对象数组中为Mac应用程序制作一个简单的菜单。现在的问题是如何传递选择器,它在数组中是一个字符串,但在代码中是一个函数 这个班是 class menuArrayObject { var title: String = "" var subMenuTitles: [String] = [] var subMenuSelectors: [String] = [] } 这是我的密码 for
class menuArrayObject
{
var title: String = ""
var subMenuTitles: [String] = []
var subMenuSelectors: [String] = []
}
这是我的密码
for index2 in 0...counter2 - 1
{
let subMenuTitle = arrayObject.subMenuTitles[index2]
let subMenuSelector = NSSelectorFromString(arrayObject.subMenuSelectors[index2])
let subMenu = NSMenuItem(title: subMenuTitle, action: #selector(subMenuSelector(_:)),keyEquivalent: "")
indexMenu.addItem(subMenu)
}
错误消息(在let子菜单=)是:“选择器的参数不能引用属性”
这可以吗?这真的值得吗?有更好的办法吗
提前感谢强调文本您试图做的是完全合法的–您确实可以将字符串转换为选择器,然后将该选择器传递给菜单项 但是,您试图使用选择器文字语法初始化一个
选择器
,将该语言构造一个选择器
作为参数(这在语法上是错误的),实际上您可以将NSSelectorFromString
返回的选择器
传递给NSMenuItem initialiser调用
选择器文字语法#selector
在您有一个“固定”选择器时使用(例如,您所在类的实例方法)。NSSelectorFromString
适用于类似您的情况,选择器是一个变量(现在在Swift 2.2中确实为#selector
文本提供了一些语法!)
查看此SO帖子:
import Cocoa
class MenuArrayObject
{
var title: String = "Foo"
var subMenuTitles: [String] = ["foo"]
var subMenuSelectors: [String] = ["foobar"]
}
let menuArrayObject = MenuArrayObject()
let indexMenu = NSMenu()
for (i, submenuTitle) in menuArrayObject.subMenuTitles.enumerate() {
let selectorStr = menuArrayObject.subMenuSelectors[i]
let selector = NSSelectorFromString(selectorStr)
let item = NSMenuItem(title: submenuTitle, action: selector, keyEquivalent: "")
indexMenu.addItem(item)
}