我需要把一个阿拉伯语单词分解成它的辅音和元音.例如,"ضَرَبَ"有三个辅音和三个元音,因此我希望它的长度是6而不是3.然而:

let t = "ضَرَبَ"
let ud = t.decomposedStringWithCanonicalMapping
print("ud Length = \(ud.count)")

我得了3分而不是6分...如何将该字符串分解为以下数组:

"\u{0636}\u{064e}\u{0631}\u{064e}\u{0628}\u{064e}"

推荐答案

您的目标是在应用标准化后考虑Unicode代码点,而不是SWIFT Character(即扩展字素集群)的集合.你可以用.unicodeScalars来做到这一点:

print("ud Length = \(ud.unicodeScalars.count)")  // ud Length = 6
                        ^^^^^^^^^^^^^^

记住,这不仅仅是"辅音和元音".像shaddah和nunation这样的东西在标准化后也将是代码点(我认为这对您的用例是有好处的;只是要记住一些东西).

您提出的关于"将此字符串分解为以下数组"的问题有些误导.您给出的示例是一个字符串,而不是一个array.但重要的是,它是the same String as 100.(用==判断它.)但是,如果您需要UnicodeScalars数组,则应该是Array(ud.unicodeScalars).

Swift相关问答推荐

通过withstickedContinuation传递通用类型T

在Swift中initt()完成后运行一个函数

对多个项目的数组进行排序

了解SWIFT中的任务行为

VisionOS TabBar预览中是否存在漏洞?

在SwiftUI中如何预览嵌套的ScrollView,以避免触发可刷新修饰符

如何使用 Swift 在非本地函数中切换()一个 Bool?

如何为等待函数调用添加超时

签署GoogleSignIn-GoogleSignIn需要开发团队

使用协议捕获 SwiftUI 视图

Vapor 4,如何按外键过滤?

如何在 Swift 中将 XPC 自定义类列入白名单?

SwiftUI 文本被意外截断

仅在 Swift 中创建 Setter

AES 加密和解密

更新我的 pod 导致 GoogleDataTransport Umbrella 标头出现错误

为 UIImagePicker 设置委托返回错误

如何将多个枚举值作为函数参数传递

iOS:如何检测用户是否订阅了自动更新订阅

枚举大小写的原始值必须是文字