我有一个这样的变量名列表(BankHelper.swift):
static var va_1_atm =
"""
<ol>
<li>Silahkan kunjungi ATM terdekat</li>
<li>Pilih Menu <strong>Transaksi Lain</strong></li>
<li>Pilih <strong>Pembayaran</strong></li>
<li>Pilih <strong>Lain-lain</strong></li>
<li>Pilih <strong>BRIVA</strong></li>
<li>Masukkan Nomor Virtual Account, <strong>\(virtual_account)</strong></li>
<li>Pilih <strong>Ya</strong></li>
<li>Ambil bukti bayar Anda, selesai</li>
</ol>
"""
static var va_2_atm =
"""
<ol>
<li>Silahkan kunjungi ATM terdekat</li>
<li>Pilih Menu <strong>Transaksi Lain</strong></li>
<li>Pilih <strong>Pembayaran</strong></li>
<li>Pilih <strong>Lain-lain</strong></li>
<li>Pilih <strong>BRIVA</strong></li>
<li>Masukkan Nomor Virtual Account, <strong>\(virtual_account)</strong></li>
<li>Pilih <strong>Ya</strong></li>
<li>Ambil bukti bayar Anda, selesai</li>
</ol>
"""
static var va_3_atm =
"""
<ol>
<li>Silahkan kunjungi ATM terdekat</li>
<li>Pilih Menu <strong>Transaksi Lain</strong></li>
<li>Pilih <strong>Pembayaran</strong></li>
<li>Pilih <strong>Lain-lain</strong></li>
<li>Pilih <strong>BRIVA</strong></li>
<li>Masukkan Nomor Virtual Account, <strong>\(virtual_account)</strong></li>
<li>Pilih <strong>Ya</strong></li>
<li>Ambil bukti bayar Anda, selesai</li>
</ol>
"""
我有这样的价值数据:
ReservationModel.bankAccount = 1
问题是如何使用上面的值动态更改上面列表的变量名称,我可以这样尝试:
cell.bankDesc.text = BankHelper.va_+(ReservationModel.bankAccount)+_atm.htmlToString
,但是在Swift中不起作用。我该如何实现这样的目标? ,因此,更改值后,它会动态更改为列表数据。
答案 0 :(得分:2)
使用连续的整数值,可以使它们成为Array
的索引。
class BankHelper {
static var va_1_atm = "<a>les gorilles</a>"
static var va_2_atm = "<div>in comedy</div>"
static var va_3_atm = "<marquee>die sad</marquee>"
fileprivate static var all = [va_1_atm, va_2_atm, va_3_atm]
static func string(for bankAccount: Int) -> String? {
return all[bankAccount - 1]
}
}
用法:
cell.bankDesc.text = BankHelper.string(for: ReservationModel.bankAccount)!.htmlToString
对于不连续的值,您可以将它们设置为Dictionary
的键。
class BankHelper {
static var va_1_atm = "<a>les gorilles</a>"
static var va_2_atm = "<div>in comedy</div>"
static var va_3_atm = "<marquee>die sad</marquee>"
fileprivate static var all = [1: va_1_atm, 2: va_2_atm, 3: va_3_atm]
static func string(for bankAccount: Int) -> String? {
return all[bankAccount]
}
}
用法:
cell.bankDesc.text = BankHelper.string(for: ReservationModel.bankAccount)!.htmlToString
或者,您可以使用镜像按名称检索实例变量(这意味着您的变量不能为static
才能起作用),但是您可以考虑使用单例模式。
class BankHelper {
var va_1_atm = "<a>les gorilles</a>"
var va_2_atm = "<div>in comedy</div>"
var va_3_atm = "<marquee>die sad</marquee>"
func string(for bankAccount: Int) -> String? {
return Mirror(reflecting: self).descendant("va_\(bankAccount)_atm") as? String
}
}
用法:
cell.bankDesc.text = BankHelper().string(for: ReservationModel.bankAccount)!.htmlToString
您需要任意访问静态变量?通过遵守NSObject
来使用Objective-C层。
class BankHelper: NSObject {
@objc static var va_1_atm = "<a>les gorilles</a>"
@objc static var va_2_atm = "<div>in comedy</div>"
@objc static var va_3_atm = "<marquee>die sad</marquee>"
static func string(for bankAccount: Int) -> String? {
return value(forKey: "va_\(bankAccount)_atm") as? String
}
}
用法:
cell.bankDesc.text = BankHelper.string(for: ReservationModel.bankAccount)!.htmlToString
答案 1 :(得分:1)
为什么3个不同的变量
static var va_1_atm
static var va_2_atm
static var va_3_atm
当我们可以在此处使用array
并使用ReservationModel.bankAccount
的值到达index
的{{1}}以获得适当的文本时。
但是,如果您想以这种方式做
可以做的是,将所有变量存储在数组中。您在该数组中存储的变量的索引将与您尝试在变量名称中包括的索引值相对应。
array
然后,只要您有var atms = [typeOfAtmVarHere]()
个与基于var中的va_ 1 _atm的索引匹配的索引,就继续添加此数组。
最后遍历它,并以static var va_1_atm
为基础,从array
到ReservationModel.bankAccount