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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:09:18