从Int变量设置SwiftUI keyboardShortcut

wlzqhblo  于 2023-03-17  发布在  Swift
关注(0)|答案(3)|浏览(156)

我想在swiftUI中从indexvariable开始的循环中设置一个键盘快捷键。
我的代码(注解行)未编译。

var body: some View {
    ForEach (1...5, id: \.self) { index in
      Button("\(index)"){print("\(index) pressed")}
        //.keyboardShortcut("\(index)", modifiers: [.command])
    }
  }
}

这是怎么做到的?

csbfibhn

csbfibhn1#

你需要把Int的索引转换成Character,然后再转换成KeyEquivalent。我强制打开UnicodeScalar,因为它返回一个可选的,但是对于这个例子,我们保证一个Int,这应该不是问题。但是要知道它在那里。

var body: some View {
    ForEach (1...5, id: \.self) { index in
      Button("\(index)"){print("\(index) pressed")}
        .keyboardShortcut(KeyEquivalent(Character(UnicodeScalar(index)!)), modifiers: [.command])
    }
}
bgtovc5b

bgtovc5b2#

@Yrb的解决方案编译,但不能按预期工作,因为UnicodeScalar(index)被解释为带有数字索引的unicode。
这对我很有效:

struct BList: View {

  var body: some View {
    VStack{
      ForEach (1...5, id: \.self) { index in
        Button("\(index)"){print("\(index) pressed")}
          .keyboardShortcut(KeyEquivalent(Character(UnicodeScalar(0x0030+index)!)) , modifiers: [.command])
      }
    }
  }
}
jjjwad0x

jjjwad0x3#

如果索引范围有限,可以执行以下操作:

var body: some View {
    ForEach (1...5, id: \.self) { index in
      Button("\(index)"){print("\(index) pressed")}
        .keyboardShortcut(["0", "1", "2", "3", "4", "5"][index])
    }
}

相关问题