gpt4 book ai didi

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

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

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

类(class)是

 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 subMenu =)是:“#selector 的参数无法引用属性”

这可行吗?这实际上是可取的吗?有更好的办法吗?

提前致谢强调文字

最佳答案

您尝试做的事情是完全合法的 - 您确实可以将字符串转换为选择器,然后将该选择器传递给菜单项。

但是,您尝试使用选择器文字语法来初始化 Selector,让该语言构造一个 Selector 作为参数(这在语法上是错误的),实际上,您只需将 NSSelectorFromString 返回的 Selector 传递给 NSMenuItem 初始化程序调用即可。

当您心中有一个“固定”选择器,并且想要为其创建一个 Selector(例如,您所在的类(class))。 NSSelectorFromString 适用于像您这样的情况,其中选择器是一个变量(现在在 Swift 2.2 中确实为 #selector 文字给出了一些语法!)

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

关于arrays - 我可以使用数组中的字符串作为 Swift 中的选择器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50615901/

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