Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我可以使用数组中的字符串作为Swift中的选择器吗?_Arrays_Swift_Selector - Fatal编程技术网

Arrays 我可以使用数组中的字符串作为Swift中的选择器吗?

Arrays 我可以使用数组中的字符串作为Swift中的选择器吗?,arrays,swift,selector,Arrays,Swift,Selector,我正在尝试学习Swift——当前的任务是从包含字符串的对象数组中为Mac应用程序制作一个简单的菜单。现在的问题是如何传递选择器,它在数组中是一个字符串,但在代码中是一个函数 这个班是 class menuArrayObject { var title: String = "" var subMenuTitles: [String] = [] var subMenuSelectors: [String] = [] } 这是我的密码 for

我正在尝试学习Swift——当前的任务是从包含字符串的对象数组中为Mac应用程序制作一个简单的菜单。现在的问题是如何传递选择器,它在数组中是一个字符串,但在代码中是一个函数

这个班是

 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)
}