在開發(fā)小組件時遇到獲取是否存在桌面的相關需求,通過時間戳記錄對比的方式進行判斷依賴于小組件的刷新,時效性比較差。
于是乎發(fā)現(xiàn)了這個方法,可以比較及時的獲取到是否在桌面上的方式。
@objc static func getWidgetConfigrations(widgetName: String, completion: @escaping (_ isInDeskTop: Bool) -> Void){
guard #available(iOS 14, *) else {
completion(false)
return //iOS 14 以下系統(tǒng)就直接返回
}
let operationQueue = OperationQueue.current ?? OperationQueue.main
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.getCurrentConfigurations { result in
var isInDeskTop = false
defer { operationQueue.addOperation { completion(isInDeskTop) } }
guard case.success(let widgets) = result else { return }
for info:WidgetInfo in widgets {
if info.kind == widgetName {//判斷當前存在的widgets 的kind與想要獲取的widgetName是否是同一個widget kind
isInDeskTop = true
break
}
}
}
#endif
}