在Swift中动态使用Font Awesome

Jer*_*aul 2 font-awesome swift

我试图在Swift中动态编码字体真棒字符.我正在使用一个返回字符代码的API(格式为f236),我希望将其作为unicode注入UILabel.理想情况下,我想做以下事情:

var iconCode: String? = jsonItem.valueForKey("icon") as? String
var unicodeIcon = "\u{\(iconCode)}"
label.text = "\(unicodeIcon) \(titleText)"
Run Code Online (Sandbox Code Playgroud)

但是你显然不能这样做.有没有解决这个问题的方法?

ric*_*ter 6

@abdullah有一个很好的解决方案,但是如果有人再遇到它,那么更多关于根本问题...

你不能写var unicodeIcon = "\u{\(iconCode)}"因为Swift解析字符串转义码的顺序.\u{xxxx}已经是一个转义代码,并且你试图在其中嵌入另一个转义码(字符串插值) - 解析器只能处理一个时间.

相反,您需要一种更直接的方法来构造一个十六进制Unicode标量值String(实际上,a Character,因为您只有一个).以下是如何做到这一点(标量值为整数):

let unicodeIcon = Character(UnicodeScalar(0x1f4a9))
label.text = "\(unicodeIcon) \(titleText)"
Run Code Online (Sandbox Code Playgroud)

当然,您的字符代码是字符串,因此您需要先解析该字符串中的整数,然后才能将其传递给上面的字符串.这是一个快速扩展UInt32:

extension UInt32 {
    init?(hexString: String) {
        let scanner = NSScanner(string: hexString)
        var hexInt = UInt32.min
        let success = scanner.scanHexInt(&hexInt)
        if success {
            self = hexInt
        } else {
            return nil
        }
    }
}

let unicodeIcon = Character(UnicodeScalar(UInt32(hexString: "1f4a9")!))
label.text = "\(unicodeIcon) \(titleText)"
Run Code Online (Sandbox Code Playgroud)