refactor: 统一获取 keyWindow 的实现,简化 Swift 代码
主要变更: 1. 移除 Swift 中重复实现的 getKeyWindow() 方法,统一调用 ObjC inline 函数 kGetKeyWindow()。 2. 更新 EPLoginManager 中的相关调用,确保一致性和简洁性。 此更新旨在提升代码的可维护性,减少冗余实现,确保跨语言调用的一致性。
This commit is contained in:
@@ -41,8 +41,8 @@ import UIKit
|
||||
let epTabBar = EPTabBarController.create()
|
||||
epTabBar.refreshTabBarWithIsLogin(true)
|
||||
|
||||
// 设置为根控制器
|
||||
if let window = getKeyWindow() {
|
||||
// 设置为根控制器(统一从 ObjC inline 函数获取)
|
||||
if let window = kGetKeyWindow() {
|
||||
window.rootViewController = epTabBar
|
||||
window.makeKeyAndVisible()
|
||||
|
||||
@@ -63,7 +63,7 @@ import UIKit
|
||||
let epTabBar = EPTabBarController.create()
|
||||
epTabBar.refreshTabBarWithIsLogin(true)
|
||||
|
||||
if let window = getKeyWindow() {
|
||||
if let window = kGetKeyWindow() {
|
||||
window.rootViewController = epTabBar
|
||||
window.makeKeyAndVisible()
|
||||
|
||||
@@ -87,27 +87,7 @@ import UIKit
|
||||
|
||||
// MARK: - Helper Methods
|
||||
|
||||
/// 获取 keyWindow(iOS 13+ 兼容)
|
||||
/// - Note: Swift 实现,与 YUMIMacroUitls.h 的 kWindow 宏逻辑保持一致
|
||||
/// ObjC 代码应直接使用 kWindow 宏,避免重复
|
||||
private static func getKeyWindow() -> UIWindow? {
|
||||
if #available(iOS 13.0, *) {
|
||||
for windowScene in UIApplication.shared.connectedScenes {
|
||||
if let windowScene = windowScene as? UIWindowScene,
|
||||
windowScene.activationState == .foregroundActive {
|
||||
for window in windowScene.windows {
|
||||
if window.isKeyWindow {
|
||||
return window
|
||||
}
|
||||
}
|
||||
return windowScene.windows.first
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return UIApplication.shared.keyWindow
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// Swift 侧不再重复实现 keyWindow 获取,统一调用 ObjC inline 函数 kGetKeyWindow()
|
||||
|
||||
/// 检查并显示专属颜色引导页
|
||||
private static func checkAndShowSignatureColorGuide(in window: UIWindow) {
|
||||
|
@@ -6,6 +6,7 @@
|
||||
//
|
||||
///一些宏
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "../Tools/Bundle/NSBundle+Localizable.h"
|
||||
|
||||
#ifndef YUMIMacroUitls_h
|
||||
@@ -49,29 +50,35 @@ isPhoneXSeries = [[UIApplication sharedApplication] delegate].window.safeAreaIns
|
||||
#define kWeakify(o) try{}@finally{} __weak typeof(o) o##Weak = o;
|
||||
#define kStrongify(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
|
||||
|
||||
/// 兼容 iOS 13+ 的 keyWindow 获取
|
||||
/// 使用此宏统一获取 keyWindow,避免在各处重复实现
|
||||
/// 兼容 iOS 13+ 的 keyWindow 获取(Swift & ObjC 通用)
|
||||
/// 使用此函数统一获取 keyWindow,避免在各处重复实现
|
||||
/// 自动处理 iOS 13+ 的 UIWindowScene 和旧版本的兼容性
|
||||
/// Swift 代码请使用 EPLoginManager.getKeyWindow() 等效方法
|
||||
#define kWindow ({\
|
||||
UIWindow *window = nil;\
|
||||
if (@available(iOS 13.0, *)) {\
|
||||
for (UIWindowScene *scene in [UIApplication sharedApplication].connectedScenes) {\
|
||||
if (scene.activationState == UISceneActivationStateForegroundActive) {\
|
||||
for (UIWindow *w in scene.windows) {\
|
||||
if (w.isKeyWindow) {\
|
||||
window = w;\
|
||||
break;\
|
||||
}\
|
||||
}\
|
||||
if (window) break;\
|
||||
}\
|
||||
}\
|
||||
} else {\
|
||||
window = [UIApplication sharedApplication].keyWindow;\
|
||||
}\
|
||||
window;\
|
||||
})
|
||||
static inline __attribute__((unused)) UIWindow * _Nullable kGetKeyWindow(void) {
|
||||
UIWindow *window = nil;
|
||||
if (@available(iOS 13.0, *)) {
|
||||
for (UIWindowScene *scene in [UIApplication sharedApplication].connectedScenes) {
|
||||
if (scene.activationState == UISceneActivationStateForegroundActive) {
|
||||
for (UIWindow *w in scene.windows) {
|
||||
if (w.isKeyWindow) {
|
||||
return w;
|
||||
}
|
||||
}
|
||||
if (scene.windows.firstObject) {
|
||||
return scene.windows.firstObject;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
window = [UIApplication sharedApplication].keyWindow;
|
||||
#pragma clang diagnostic pop
|
||||
}
|
||||
return window;
|
||||
}
|
||||
|
||||
// 兼容旧代码:保留宏入口
|
||||
#define kWindow kGetKeyWindow()
|
||||
|
||||
#define kImage(image) [UIImage imageNamed:image]
|
||||
|
||||
|
Reference in New Issue
Block a user