问题描述
L10n.localizationCandidates(for:) 每次 string() / format() 调用都重新创建 Set<String> from moduleBundle.localizations 和完整的 Locale.preferredLanguages 数组。Localization 在 app 生命周期内不会变化,这部分计算完全没必要重复。
预期结果
availableLocalizations 和 localizationCandidates 结果缓存一次,后续调用直接读取。
建议方案
private static let availableLocalizations: Set<String> = {
Set(moduleBundle.localizations.map { $0.lowercased() })
}()
private static func localizationCandidates(for language: String) -> [String] {
// ... 逻辑不变,使用 availableLocalizations
}
同时 Bundle.module 的 localizations 取值也只需要一次。
影响模块
性能优化,不影响功能正确性
问题描述
L10n.localizationCandidates(for:)每次string()/format()调用都重新创建Set<String>frommoduleBundle.localizations和完整的Locale.preferredLanguages数组。Localization 在 app 生命周期内不会变化,这部分计算完全没必要重复。预期结果
availableLocalizations和localizationCandidates结果缓存一次,后续调用直接读取。建议方案
同时
Bundle.module的localizations取值也只需要一次。影响模块
性能优化,不影响功能正确性