Files
youle_app_ios_v2/ylgamehall/Source/Resource/SubGameDirectoryStore.swift
T
joywayerandClaude Opus 4.7 6ef90f9c3f SubGameDirectoryStore.keyPrefix 也加 nonisolated
之前只把 3 个 method 标 nonisolated,漏了 keyPrefix 静态常量。actor 内的
ensureReady 访问 method 时跨 actor 拿到 keyPrefix 会触发 MainActor 隔离检查
失败(SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor 项目设置下,未标注则默认
MainActor)。补 nonisolated。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-23 23:07:23 +08:00

45 lines
2.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// SubGameDirectoryStore.swift
// ylgamehall
//
// 子游戏目录名持久化映射:H5 传的 Gamedirectory(也是 gameStart 同名)→ 实际沙盒
// 目录名。与 daoqi msext gameController.m:1414 / 2183-2188 等价:
// - 首次安装:actualDir = directory,写入 NSUserDefaults
// - 每次 zip 升级(远端 game_version > 本地 version.xml):actualDir 末尾追加 "1"
// 新版本解压到新目录,旧目录残留在沙盒(msext 同款"追加而非原子替换"策略)
//
// 存储约定:UserDefaults key = "ylgh.subGameDir.<directory>"value = 实际目录名
//
import Foundation
/// UserDefaults 线程安全,所有方法 nonisolated 让 actor / MainActor / 后台线程都能直接调用。
public enum SubGameDirectoryStore {
nonisolated private static let keyPrefix = "ylgh.subGameDir."
/// 当前实际目录名。已持久化 → 返回持久化值;未持久化 → 返回 directory 本身
/// (对应 msext NSUserDefaults 缺 key 时 gamefilepath = gamename 的默认)。
nonisolated public static func current(forKey directory: String) -> String {
UserDefaults.standard.string(forKey: keyPrefix + directory) ?? directory
}
/// 触发升级:末尾追加 "1",写回 UserDefaults,返回新值。
/// msext gameController.m:1414 等价 `gamefilepath = [NSString stringWithFormat:@"%@1", gamefilepath]`。
@discardableResult
nonisolated public static func advance(forKey directory: String) -> String {
let next = current(forKey: directory) + "1"
UserDefaults.standard.set(next, forKey: keyPrefix + directory)
return next
}
/// 首次访问时把 directory 自身写入(与 msext gameController.m:2187
/// SaveDefaultInfo 等价)。后续 advance 会基于此值追加。
nonisolated public static func saveInitialIfNeeded(forKey directory: String) {
let k = keyPrefix + directory
if UserDefaults.standard.string(forKey: k) == nil {
UserDefaults.standard.set(directory, forKey: k)
}
}
}