【问题标题】:Substring with emoj in swiftswift中带有表情符号的子字符串
【发布时间】:2017-06-08 13:03:53
【问题描述】:

我有一个字符串“hi @????”。如果我检查这个字符串的长度,它是 6。如果我写 string.characters[5] 得到数组索引超出界限异常。为什么?怎么提取??? .?

检查我使用 string.utf16.count 的长度。

【问题讨论】:

  • 表情符号在索引 4 处。
  • 为什么会出现异常?长度为 6。我试图让角色处于特定位置。
  • 笑脸在字符串中占据 2 个位置(这就是计数为 6 的原因),但使用了 1 个字符,这就是它位于第 4 位的原因。如果您观看有关什么的 WWDC 2017 视频Swift 中的新功能,他们涵盖了这一点。您还可以在此处阅读更多相关信息:developer.apple.com/library/content/documentation/Swift/…
  • Emoji 在 Swift 中算作单个字符,但算作两个 UTF-16 代码单元。因此string.utf16.count 不同于string.characters.count

标签: swift string swift3


【解决方案1】:

由于 emojis 被表示为 Unicode 字符,其长度不一定为 1,因此您会收到错误,因此您应该始终使用从 .index(of:) 函数获得的索引来访问包含表情符号的字符串。

看看这个游乐场 sn-p,它向您展示了如何安全地从字符串中取出表情符号。

let s = "hi @? , bye ☀️ asd"
s.characters.count
s.characters.index(of: "?")
if let emojiIndex = s.characters.index(of: "?") {
    s[emojiIndex]
}
s.characters.index(of: "☀️")
if let emojiIndex = s.characters.index(of: "☀️") {
    s[emojiIndex]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2015-09-11
    • 2019-04-18
    • 1970-01-01
    • 2017-11-28
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多