You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:17:22