Swift动态变量名称取决于值 [英] Swift Dynamic Variable Name depend on value
问题描述
我有一个这样的变量名列表(BankHelper.swift):
静态var va_1_atm ="< ol>< li> Silahkan kunjungi ATM terdekat</li>< li> Pilih菜单< 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虚拟帐户,< strong> \(virtual_account)</strong></li>< li> Pilih< strong" Ya</strong</li>li ambil bukti bayar安达,塞莱塞<</ol>"静态var va_2_atm ="< ol>< li> Silahkan kunjungi ATM terdekat</li>< li> Pilih菜单< 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虚拟帐户,< strong> \(virtual_account)</strong></li>< li> Pilih< strong" Ya</strong</li>li ambil bukti bayar安达,塞莱塞<</ol>"静态var va_3_atm ="< ol>< li> Silahkan kunjungi ATM terdekat</li>< li> Pilih菜单< 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虚拟帐户,< strong> \(virtual_account)</strong></li>< li> Pilih< strong" Ya</strong</li>li ambil bukti bayar安达,塞莱塞<</ol>"
我有这样的价值数据:
ReservationModel.bankAccount = 1
问题是我该如何使用上面的值动态更改上面列表的变量名,我可以这样尝试:
cell.bankDesc.text = BankHelper.va _ +(ReservationModel.bankAccount)+ _ atm.htmlToString
,但是在Swift中不起作用.我该如何实现这样的目标?,因此,更改值后,它会动态更改为列表数据.
数组解决方案
使用连续的整数值,可以使它们成为 Array
的索引.
BankHelper类{静态var va_1_atm =一个大猩猩"/"a"静态var va_2_atm =喜剧/div中的div"静态var va_3_atm ="字幕" die sad</marquee""fileprivate静态var all = [va_1_atm,va_2_atm,va_3_atm]静态函数字符串(用于bankAccount:Int)->细绳?{返回全部[bankAccount-1]}}
用法:
cell.bankDesc.text = BankHelper.string(for:ReservationModel.bankAccount)!. htmlToString
字典解决方案
对于不连续的值,您可以将它们设置为 Dictionary
的键.
BankHelper类{静态var va_1_atm =一个大猩猩"/"a"静态var va_2_atm =喜剧/div中的div"静态var va_3_atm ="字幕" die sad</marquee""fileprivate静态var all = [1:va_1_atm,2:va_2_atm,3:va_3_atm]静态函数字符串(用于bankAccount:Int)->细绳?{全部归还[bankAccount]}}
用法:
cell.bankDesc.text = BankHelper.string(for:ReservationModel.bankAccount)!. htmlToString
使用镜像解决方案
或者,您可以使用镜像按名称检索实例变量(这意味着您的变量不能为 static
起作用),但是您可以考虑采用单例模式.
BankHelper类{var va_1_atm =一个大猩猩/a"var va_2_atm =喜剧/div中的div".var va_3_atm ="字幕" die sad</marquee>"func字符串(用于bankAccount:Int)->细绳?{返回Mirror(reflecting:self).descendant("va _ \(bankAccount)_atm")为?细绳}}
用法:
cell.bankDesc.text = BankHelper().string(用于:ReservationModel.bankAccount)!. htmlToString
使用NSObject解决方案
您需要任意访问静态变量?通过遵守 NSObject
来使用Objective-C层.
BankHelper类:NSObject {@objc static var va_1_atm =" les gorilles</a""@objc static var va_2_atm =喜剧中的/div中的"@objc static var va_3_atm =" marquee> die sad</marquee>"静态函数字符串(用于bankAccount:Int)->细绳?{返回值(forKey:"va _ \(bankAccount)_atm")为?细绳}} 用法:
cell.bankDesc.text = BankHelper.string(for:ReservationModel.bankAccount)!. htmlToString
I had a list of variable name like this (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>
"""
and I have value data that like this:
ReservationModel.bankAccount = 1
the question is how can I use the value above to dynamically change the variable name for the list above, I try like this:
cell.bankDesc.text = BankHelper.va_+(ReservationModel.bankAccount)+_atm.htmlToString
but it's not working in Swift. How can I achieve something like that? , so when the value is changed it dynamically changes to list data.
解决方案 Solution with Array
With continuous integer values, you can make them indexes of an 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]
}
}
Usage:
cell.bankDesc.text = BankHelper.string(for: ReservationModel.bankAccount)!.htmlToString
Solution with Dictionary
With discontinuous values, you can make them keys of a 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]
}
}
Usage:
cell.bankDesc.text = BankHelper.string(for: ReservationModel.bankAccount)!.htmlToString
Solution with Mirror
Alternatively, you may use mirroring to retrieve an instance variable by name (which means that your variables can't be static
for this to work), but you may consider a singleton pattern.
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
}
}
Usage:
cell.bankDesc.text = BankHelper().string(for: ReservationModel.bankAccount)!.htmlToString
Solution with NSObject
You need arbitrary access to static variables? Use a layer of Objective-C by conforming to NSObject
.
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
}
}
Usage:
cell.bankDesc.text = BankHelper.string(for: ReservationModel.bankAccount)!.htmlToString
这篇关于Swift动态变量名称取决于值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文