如何在运行时从 InfoPlist.string 中获取值?
How to get a value from InfoPlist.string at runtime?
在 Project/SupportingFiles/en.lproj/InfoPlist.strings
我有这个值:
NSUserTrackingUsageDescription = "dummy";
这是一个本地化 InfoPlist.strings
文件,可以是多种语言。在这种情况下,文件夹 en.lproj
用于英语。
例如,假设在编译之前我可以写入 NSUserTrackingUsageDescription
一个值,并且我需要确保它在运行时是否为“虚拟”。
如果 NSUserTrackingUsageDescription
是“虚拟”或其他字符串,可以在运行时使用 Swift?
检查 Swift
我正在进行研究,但找不到任何 Swift 代码来检查。
编辑
我试过这个代码:
let string = Bundle.main.infoDictionary!["NSUserTrackingUsageDescription"] as! String
if (string == "dummy"){
logger.debug("NSUserTrackingUsageDescription is dummy")
}else{
logger.debug("NSUserTrackingUsageDescription is \(string)")
}
但是它不起作用,因为它进入了 else 并打印了这个:
LauncherViewController.requestAppTrackingTransparencyPermission():131
- NSUserTrackingUsageDescription is dummy, replaced with translation from InfoPlist.strings
我不知道为什么系统要将, replaced with translation from InfoPlist.strings
添加到dummy
。
最好的方法是使用:
guard let string = Bundle.main.object(forInfoDictionaryKey: "NSUserTrackingUsageDescription") as? String
else { fatalError("not found") }
来自 Apple docs 的注释:
Use of this method is preferred over other access methods because it returns the localized value of a key when one is available.
在 Project/SupportingFiles/en.lproj/InfoPlist.strings
我有这个值:
NSUserTrackingUsageDescription = "dummy";
这是一个本地化 InfoPlist.strings
文件,可以是多种语言。在这种情况下,文件夹 en.lproj
用于英语。
例如,假设在编译之前我可以写入 NSUserTrackingUsageDescription
一个值,并且我需要确保它在运行时是否为“虚拟”。
如果 NSUserTrackingUsageDescription
是“虚拟”或其他字符串,可以在运行时使用 Swift?
我正在进行研究,但找不到任何 Swift 代码来检查。
编辑
我试过这个代码:
let string = Bundle.main.infoDictionary!["NSUserTrackingUsageDescription"] as! String
if (string == "dummy"){
logger.debug("NSUserTrackingUsageDescription is dummy")
}else{
logger.debug("NSUserTrackingUsageDescription is \(string)")
}
但是它不起作用,因为它进入了 else 并打印了这个:
LauncherViewController.requestAppTrackingTransparencyPermission():131
- NSUserTrackingUsageDescription is dummy, replaced with translation from InfoPlist.strings
我不知道为什么系统要将, replaced with translation from InfoPlist.strings
添加到dummy
。
最好的方法是使用:
guard let string = Bundle.main.object(forInfoDictionaryKey: "NSUserTrackingUsageDescription") as? String
else { fatalError("not found") }
来自 Apple docs 的注释:
Use of this method is preferred over other access methods because it returns the localized value of a key when one is available.