如何存储或使用结构体中的等效键盘

问题描述 投票:0回答:1

我有一个包含按钮菜单信息的结构。修饰键当然可以为零,因为并非所有菜单项都有等效的键盘。

struct MenuInfo {
    var name: String
    var image: String
    var tool: Tools
    var modifier: String?
}

我有 menuInfo 对象数组。然后我使用 for 语句来加载

ForEach(engToolbar, id: \.name) { (curMenu) in
    Button(curMenu.name, systemImage: curMenu.image)
        { setTool( curMenu.tool ) }
        .background(getBGColor( curMenu.tool))
        .keyboardShortcut( curMenu.modifier, modifiers: .control )
}

当我像上面那样调用它时,出现此错误:

无法转换“String”类型的值?预期参数类型“KeyEquivalent”

我尝试这样调用它,但没有收到错误:

.keyboardShortcut( "c", modifiers: .control )

天哪,“c”对我来说看起来像一个字符串:)。当然,一切不可能都有相同的捷径。我尝试将修饰符指定为 KeyEquivalent:

var modifier: KeyEquivalent?

然后我被告知修饰符 var 需要解除绑定(我不能有一个 nil 键等效项。所以...我将修饰符移回字符串。然后我尝试转换为 KeyEquivalent:

.keyboardShortcut(( KeyEquivalent)curMenu.modifier, modifiers: .control )

我收到此错误:

预期的 ',' 分隔符

是的,我不知道该怎么做才能解决这个问题。

在长期的错误中,我觉得我需要做类似的事情:

.keyboardShortcut( curMenu.modifier != nil ? (KeyEquivalent)curMenu.modifier : nil, modifiers: .control)
swift swiftui menu
1个回答
0
投票

您可以尝试这种方法,在您的

var modifier: Character?
中使用
MenuInfo
, 和

  .keyboardShortcut(KeyEquivalent(curMenu.modifier ?? "c"), modifiers: .control)
© www.soinside.com 2019 - 2024. All rights reserved.