Swift新手求助:如何通过字符串获取类属性或Currency实例?
解决方案
首先明确你之前尝试的方法无效的原因:NSClassFromString 和 Bundle.main.classNamed 是用于查找类类型的API,而ccy1是Currency类的实例对象,并非类本身,因此这两个方法完全不适用于你的场景。
以下是两种符合需求的实现方式:
一、推荐方案:通过ISO代码映射获取Currency对象
这是最直接高效的实现思路,用字典存储ISO代码与对应Currency实例的映射关系,后续可通过ISO字符串快速获取完整对象。
实现代码:
// 定义Currency类及实例 class Currency { var iso: String var name: String var country: String init(iso: String, name: String, country: String) { self.iso = iso self.name = name self.country = country } } let ccy1 = Currency(iso: "USD", name: "US-Dollar", country: "USA") let ccy2 = Currency(iso: "EUR", name: "Euro", country: "Germany") // 创建ISO代码到Currency实例的映射字典 let currencyMap: [String: Currency] = [ ccy1.iso: ccy1, ccy2.iso: ccy2 ] // 根据ISO字符串获取对象并访问属性 if let targetCurrency = currencyMap["USD"] { print(targetCurrency.name) // 输出 "US-Dollar" print(targetCurrency.country) // 输出 "USA" // 赋值给标签示例:currencyLabel.text = targetCurrency.name }
二、不推荐方案:通过实例名称字符串获取对象
如果一定要通过"ccy1"这类字符串获取对应实例,只能手动维护变量名到实例的映射字典,但这种方式灵活性极差,新增实例时必须同步更新字典,不建议在实际项目中使用。
示例代码:
// 维护变量名到实例的映射 let instanceNameMap: [String: Currency] = [ "ccy1": ccy1, "ccy2": ccy2 ] // 通过字符串"ccy1"获取实例 if let targetCurrency = instanceNameMap["ccy1"] { print(targetCurrency.name) // 输出 "US-Dollar" }
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

