我有一个包含按钮菜单信息的结构。修饰键当然可以为零,因为并非所有菜单项都有等效的键盘。
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)
您可以尝试这种方法,在您的
var modifier: Character?
中使用 MenuInfo
,
和
.keyboardShortcut(KeyEquivalent(curMenu.modifier ?? "c"), modifiers: .control)