Swift中如何将字符串映射为WalletCore的Coin枚举以验证地址
解决方法
1. 创建字符串到Coin枚举的映射
首先需要把服务器返回的币种符号(如"ETH"、"BTC")转换为WalletCore的Coin枚举类型,推荐用字典映射的方式,便于后续扩展:
private let symbolToCoinMap: [String: Coin] = [ "BTC": .bitcoin, "ETH": .ethereum, "LTC": .litecoin, "XMR": .monero ]
如果需要更灵活的匹配(比如兼容小写符号),也可以用switch函数实现:
private func coinFromSymbol(_ symbol: String) -> Coin? { switch symbol.uppercased() { case "BTC": return .bitcoin case "ETH": return .ethereum case "LTC": return .litecoin case "XMR": return .monero default: return nil } }
2. 修改地址验证逻辑
根据业务需求,这里提供两种常见的验证实现:
需求A:验证地址是否在任意一个币种中有效
func core() -> Bool { let testAddress = "sampleblockchainaddress" for symbol in networkCoins { guard let coin = symbolToCoinMap[symbol.uppercased()] else { continue // 跳过不识别的币种 } if AnyAddress.isValid(string: testAddress, coin: coin) { return true } } return false }
需求B:验证地址在所有币种中是否都有效
func core() -> Bool { let testAddress = "sampleblockchainaddress" for symbol in networkCoins { guard let coin = symbolToCoinMap[symbol.uppercased()] else { return false // 存在不识别的币种,直接返回验证失败 } if !AnyAddress.isValid(string: testAddress, coin: coin) { return false } } return true }
完整修改后的代码
将上述逻辑整合到原代码中,最终版本如下:
import SwiftUI import WalletCore struct TestCoreWallet: View { @State private var networkCoins = ["ETH", "BTC", "LTC", "XMR"] @State private var isvalid: Bool = false // 币种符号到Coin枚举的映射字典 private let symbolToCoinMap: [String: Coin] = [ "BTC": .bitcoin, "ETH": .ethereum, "LTC": .litecoin, "XMR": .monero ] var body: some View { Text(isvalid ? "true" : "false") .onTapGesture { isvalid = core() } } // 这里采用需求A的验证逻辑,可根据实际需求替换为需求B func core() -> Bool { let testAddress = "sampleblockchainaddress" for symbol in networkCoins { guard let coin = symbolToCoinMap[symbol.uppercased()] else { continue } if AnyAddress.isValid(string: testAddress, coin: coin) { return true } } return false } }
注意事项
- 若服务器返回的币种符号存在小写,统一用
uppercased()转换后再匹配映射字典 - 对于不识别的币种符号,可根据业务需求选择跳过或直接返回验证失败
- 替换代码中的
sampleblockchainaddress为实际需要验证的区块链地址
内容的提问来源于stack exchange,提问作者user10585192
相关产品推荐
相关产品推荐

