如何在 Swift 字符串中包含表情符号?

How to include emoticons in Swift string?

Here 是一篇很好的文章,引用了 iOS 个表情符号及其代码。例如\ue008为小相机。

我在我的代码中试过这个:

var myText: String = "\ue008"

这不被 Xcode 接受。如何包含它?

来自 swift 文档:

let dollarSign = "\u{24}"        // $,  Unicode scalar U+0024
let blackHeart = "\u{2665}"      // ♥,  Unicode scalar U+2665
let sparklingHeart = "\u{1F496}" // , Unicode scalar U+1F496

您可以直接使用⌘ ^ Space插入表情符号。

或者,根据 Greg 的回答:

var myText: String = "\u{e008}"

您根本不需要 unicode 常量。只需使用字符查看器并直接输入字符即可。

let sparklingHeart = ""

如果我理解您要实现的目标,那么:

在 XCode 中按“ctrl + cmd + space”。 'hearts' 表情符号

的示例用法
cell.textLabel?.text = "❤️" + " \(liker) liked \(userBeingliked)'s photo"

正如 Greg 在上面发布的那样,您可以使用 OSx 字符查看器直接将表情符号输入 Swift。默认情况下禁用字符查看器。启用方法如下:

转到系统偏好设置>语言和区域>键盘偏好设置>键盘然后选中在菜单栏中显示键盘、表情符号和符号查看器.选中后,您可以从 Wifi 和 Date/Time 图标旁边右上角的菜单栏中打开角色查看器。

1 解码 Unicode:

extension String {
    var decodeEmoji: String{
        let data = self.data(using: String.Encoding.utf8);
        let decodedStr = NSString(data: data!, encoding: String.Encoding.nonLossyASCII.rawValue)
        if let str = decodedStr{
            return str as String
        }
        return self
    }
}

用法

let decodedString = yourString.decodeEmoji

2 Unicode编码:

extension String {
    var encodeEmoji: String{
        if let encodeStr = NSString(cString: self.cString(using: .nonLossyASCII)!, encoding: String.Encoding.utf8.rawValue){
            return encodeStr as String
        }
        return self
    }
}

用法

let encodedString = yourString.encodeEmoji

从你的十六进制“0x1F52D”到实际的表情符号

let c = 0x1F602

下一步可能会从你的十六进制中得到一个 Uint32

let intEmoji = UnicodeScalar(c!).value

从这里你可以做类似

的事情
titleLabel.text = String(UnicodeScalar(intEmoji)!)

这里有一个“”

它也适用于十六进制范围

let emojiRanges = [
            0x1F600...0x1F636,
            0x1F645...0x1F64F,
            0x1F910...0x1F91F,
            0x1F30D...0x1F52D
        ]

        for range in emojiRanges {
            for i in range {
                let c = UnicodeScalar(i)!.value
                data.append(c)
            }
        }

例如从您的 Hex 范围中获取多个 UInt32

Chris Slowik 和 Greg 的答案很接近。 最简单的答案就是从这个“改写”你的字符串:

var myText: String = "\ue008"

为此:

var myText: String = "\u{008}"

在您所附的 link 上找到的 Unicode 并没有错,正如其他人所声称的那样。您只需要在字符串中重新表述即可。

上面示例中的重要代码是“008”部分。

我创建了一个简单的函数来将这些类型的 Unicode 转换为相应的表情符号:

func convertHexToEmoji(_ u:Int) -> String {
     return "\(UnicodeScalar(u)!)" }

使用:

let myText = convertHexToEmoji(008)
print(myText)

这花了我一些时间在 MacOS 11 中弄清楚,所以我想分享一下。

如果您更喜欢输入 unicode 字符而不是粘贴文字表情符号,您可以像这样找到系统表情符号的 unicode:

  1. Focus/click 到文本字段(例如网络浏览器中的搜索栏)。

  2. ctrl+cmd+space 或转到菜单栏中的 Edit->Emoji & Symbols

  3. 在角色查看器中向上滚动,直到您在右上角看到 window 展开图标:

  4. 在展开的角色查看器 window 中,按左上角按钮和 select Customize List...

  5. 向下滚动到 Code Tables 最小化列表,展开列表,打开 Unicode,然后按 Done(系统将此 window 更改为出于某种原因的黑暗模式)。

  6. 现在,单击不同的表情符号,您应该会在图片下方看到 unicode。

  7. 然后像这样注入 unicode:

var myText: String = "\u{e008}"