Swift动态变量名称取决于值 [英] Swift Dynamic Variable Name depend on value

查看:29
本文介绍了Swift动态变量名称取决于值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的变量名列表(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆