【问题标题】:Swift string count() vs NSString .length not equalSwift string count() vs NSString .length 不相等
【发布时间】:2015-07-02 04:45:51
【问题描述】:

为什么这两行给我的结果不同?

var str = "Hello ????" // the square is an emoji

count(str) // returns 7

(str as NSString).length // returns 8

参考原文:

【问题讨论】:

    标签: string swift nsstring


    【解决方案1】:

    这是因为 Swift 使用扩展字素集群。 Swift 将笑脸视为一个字符,但 NSString 方法将其视为两个 Unicode 字符,尽管它们是“组合的”并代表一个符号。

    【讨论】:

      【解决方案2】:

      我认为documentation 说得最好:

      count(_:) 函数返回的字符数并不总是与包含相同字符的 NSString 的长度属性相同。 NSString 的长度基于字符串的 UTF-16 表示中 16 位代码单元的数量,而不是字符串中 Unicode 扩展字形簇的数量。为了反映这一事实,NSString 的 length 属性在访问 Swift String 值时称为 utf16Count。

      【讨论】:

      • utf16Count 在 Swift 1.2 中不再存在,现在是 count(str.utf16)
      • 小调整:现在是str.utf16.count
      猜你喜欢
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2018-08-05
      • 1970-01-01
      相关资源
      最近更新 更多