Swift 4中设置NSMenuItem修饰符提示“表达式类型不明确”求助
嗨,这个问题我之前也碰到过!你遇到的“Type of expression is ambiguous without more context”错误,本质是Swift的类型推断没搞清楚你用的.shift和.command到底属于哪个类型——毕竟很多框架里都有类似的枚举值。
正确的两种写法:
1. 用OptionSet集合语法(推荐,Swift 3+ 更符合现代Swift风格)
NSEvent.ModifierFlags是一个OptionSet类型,直接用方括号把修饰符包起来就行,Swift能准确推断类型:
myMenuItem.keyEquivalentModifierMask = [.shift, .command]
2. 明确指定类型后使用位或运算符
如果还是想用位或|,只要明确告诉Swift你用的是NSEvent.ModifierFlags的成员,就能解决歧义:
myMenuItem.keyEquivalentModifierMask = NSEvent.ModifierFlags.shift | NSEvent.ModifierFlags.command
额外提醒
别忘了搭配设置快捷键的主按键哦!比如你要设置Shift+Cmd+S,还需要加上这行:
myMenuItem.keyEquivalent = "s"
不然光设置修饰符是不会生效的。
内容的提问来源于stack exchange,提问作者mirkokiefer
相关产品推荐
相关产品推荐

