测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年9月 |
SwiftSwift 版本 | 4.0.0 |
SPM支持 SPM | ✓ |
由 ukitaka 维护。
Swift String API的扩展,用于处理东亚宽度。最常见的用例是将Unicode标量值分类为全角(全角)或半角(半角)。
// Halfwidth Katakana (半角カナ)
"アイウエオ".unicodeScalars.forEach { (u: UnicodeScalar) in
u.isHalfwidth // true
}
// Fullwidth Katakana (全角カナ)
"アイウエオ".unicodeScalars.forEach { (u: UnicodeScalar) in
u.isFullwidth // true
}
东亚宽度由Unicode®标准附录#11指定。
UnicodeScalar
扩展对于东亚宽度,此库提供了以下方法
/// East Asian Wide (W)
/// See: http://unicode.org/reports/tr11/#ED4
unicodeScalar.isEastAsianWide
/// East Asian Narrow (Na)
/// See: http://unicode.org/reports/tr11/#ED5
unicodeScalar.isEastAsianNarrow
/// Neutral (Not East Asian):
/// See: http://unicode.org/reports/tr11/#ED7
unicodeScalar.isEastAsianNeutral
/// East Asian Halfwidth (H)
/// See: http://unicode.org/reports/tr11/#ED3
unicodeScalar.isEastAsianHalfwidth
/// East Asian Fullwidth (F)
/// See: http://unicode.org/reports/tr11/#ED2
unicodeScalar.isEastAsianFullwidth
/// East Asian Ambiguous (A)
/// See: http://unicode.org/reports/tr11/#ED6
unicodeScalar.isEastAsianAmbiguous
如果只想知道它是全角还是半角,可以使用isFullwidth
等。
// Fullwidth
unicodeScalar.isFullwidth
// Halfwidth
unicodeScalar.isHalfwidth
// NOTE:
// `isFullwidth` and `isHalfwidth` does not include East Asian Ambiguous.
// If you want to include it, you can use `isFullwidthOrAmbiguous` / `isHalfwidthOrAmbiguous` instead.
unicodeScalar.isFullwidthOrAmbiguous
unicodeScalar.isHalfwidthOrAmbiguous
String
扩展String
扩展提供了用于检查是否存在特定东亚宽度字符的containsXXX
方法。
// East Asian Width
string.containsEastAsianWideCharacters
string.containsEastAsianNarrowCharacters
string.containsEastAsianNeutralCharacters
string.containsEastAsianHalfwidthCharacters
string.containsEastAsianFullwidthCharacters
string.containsEastAsianAmbiguousCharacters
// Fullwidth or Halfwidth
string.containsFullwidthCharacters
string.containsFullwidthOrAmbiguousCharacters
string.containsHalfwidthCharacters
string.containsHalfwidthOrAmbiguousCharacters
UnicodeScalarView
扩展UnicodeScalarView
扩展提供了用于按东亚宽度计数字符串长度的countByEastAsianWidth
方法。
默认情况下,Ambiguous
字符被标记为Halfwidth
,Halfwidth
的长度为**1**,而Fullwidth
为**2**。您可以使用参数配置它们。
// count by defualt settings
"あいうえおアイウエオ".unicodeScalars.countByEastAsianWidth() // 15
// you can configure with parameters.
string.unicodeScalars.countByEastAsianWidth(halfwidthAs: 2, fullwidthAs: 4, markEastAsianAmbiguousAsFullwidth: false)
CharacterSet
?主要原因在于CharacterSet
的技术问题。我们无法创建具有不同字节长度字符的CharacterSet
的并集。
let c1 = CharacterSet(charactersIn: "\u{AAAA}")
let c2 = CharacterSet(charactersIn: "\u{AAAAA}")
c2.contains("\u{AAAAA}") // true
c1.union(c2).contains("\u{AAAAA}") // false 😫
但是,一些East Asian Width
的定义包括具有不同字节长度的字符。因此,我不能支持CharacterSet
...
EastAsianWidth.swift
需要/支持以下环境