You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Swift中如何检测当前shift键是否处于按下状态?

Swift 实时检测Shift键按下状态实现方案

你不需要依赖keyDown/keyUp的事件回调,可以直接通过系统提供的修饰键状态接口实现,根据运行平台不同实现方式如下:

macOS 平台实现

直接调用NSEvent.modifierFlags即可实时获取当前的修饰键状态,可在任意函数执行时直接调用判断:

import AppKit

func doThisThing() {
    if NSEvent.modifierFlags.contains(.shift) {
        print("Doing this thing.")
    } else {
        print("You're not holding shift.")
    }
}

如果要封装为你示例中的调用形式,可以简单封装单例工具类:

class Keyboard {
    static let shared = Keyboard()
    private init() {}
    
    func keyBeingPressed(_ key: NSEvent.ModifierFlags) -> Bool {
        return NSEvent.modifierFlags.contains(key)
    }
}

// 调用效果和你示例完全一致
func doThisThing() {
    if Keyboard.shared.keyBeingPressed(.shift) {
        print("Doing this thing.")
    } else {
        print("You're not holding shift.")
    }
}

iOS 平台实现(仅支持外接硬件键盘)

iOS 14及以上版本可以通过当前应用的活跃事件获取修饰键状态,仅在应用处于前台、有活跃交互响应链时可正常获取,不支持屏幕软键盘的shift状态检测:

import UIKit

func doThisThing() {
    guard let currentModifierFlags = UIApplication.shared.currentEvent?.modifierFlags else {
        print("You're not holding shift.")
        return
    }
    if currentModifierFlags.contains(.shift) {
        print("Doing this thing.")
    } else {
        print("You're not holding shift.")
    }
}

内容的提问来源于stack exchange,提问作者Ben216k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:15:03