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

在Xcode项目中使用Emoji及关联货币代码与图标问题咨询

问题解答

1. 获取国旗Emoji并应用到UIImageView

你提到的网站提供了各国国旗Emoji的Unicode编码,比如土耳其国旗对应编码U+1F1F8 U+1F1EA,转换成Swift字符串格式就是"\u{1F1F8}\u{1F1EA}"。但直接将字符串赋值给UIImageView.image会报错,因为该属性需要UIImage类型而非字符串。你需要把Emoji字符串渲染成图片,具体实现:

  • 从网站找到目标货币对应国家的Emoji Unicode,转成Swift字符串格式
  • 添加工具方法将Emoji字符串转为UIImage:
func emojiToImage(emoji: String, size: CGSize = CGSize(width: 40, height: 40)) -> UIImage? {
    let font = UIFont.systemFont(ofSize: size.height)
    let attributes: [NSAttributedString.Key: Any] = [.font: font]
    let attributedString = NSAttributedString(string: emoji, attributes: attributes)
    
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    attributedString.draw(in: CGRect(origin: .zero, size: size))
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
    return image
}

2. 选择合适的字典结构

推荐使用第一种键值对结构:

var currencyEmojiDict: [String: String] = ["EUR": "\u{1F1EA}\u{1F1FA}", "TRY": "\u{1F1F9}\u{1F1F7}"]

这种结构以货币代码为键,Emoji字符串为值,查询效率最高——只需传入货币代码(如from或to变量),就能直接拿到对应Emoji字符串,完全满足你同时调用货币代码和对应Emoji的需求。

第二种结构["code": "EUR", "image": "..."]更适合作为数组中的单个元素(如[["code":"EUR", "image":"..."], ...]),但仅做货币与Emoji的映射时,第一种结构更简洁高效。

3. 修改现有代码使其正常运行

将工具方法添加到ViewController中,替换原赋值逻辑:

class ViewController: UIViewController {
    
    @IBOutlet weak var amountText: UITextField!
    @IBOutlet weak var amountText2: UITextField!
    @IBOutlet weak var fromLabel: UILabel!
    @IBOutlet weak var fromImage: UIImageView!
    @IBOutlet weak var toImage: UIImageView!
    @IBOutlet weak var toLabel: UILabel!
    
    let flag = "\u{1F1F8}\u{1F1EA}"
    var currencyManager = CurrencyManager()
    
    var from: String = "EUR"
    var to: String = "TRY"
    var amount: String = "0"
    
    // 新增Emoji转图片方法
    func emojiToImage(emoji: String, size: CGSize = CGSize(width: 40, height: 40)) -> UIImage? {
        let font = UIFont.systemFont(ofSize: size.height)
        let attributes: [NSAttributedString.Key: Any] = [.font: font]
        let attributedString = NSAttributedString(string: emoji, attributes: attributes)
        
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        attributedString.draw(in: CGRect(origin: .zero, size: size))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return image
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        amountText.delegate = self
        currencyManager.delegate = self
        
        // 替换原错误赋值逻辑
        fromImage.image = emojiToImage(emoji: flag)
        
        // 若使用字典映射,可这样扩展:
        // let currencyEmojiDict: [String: String] = ["EUR": "\u{1F1EA}\u{1F1FA}", "TRY": "\u{1F1F9}\u{1F1F7}"]
        // fromImage.image = emojiToImage(emoji: currencyEmojiDict[from] ?? "")
        // toImage.image = emojiToImage(emoji: currencyEmojiDict[to] ?? "")
        // fromLabel.text = from
        // toLabel.text = to
    }
}

内容的提问来源于stack exchange,提问作者asduskun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:45:37