如前所述,由于a
Character可以由多个unipre标量组成,因此您无法准确确定两个任意字符之间有多少个不同的有效字符表示形式,因此不是符合的理想选择
Stridable。
一种方法是你的只是想打印出字母表问题是顺应
UnipreScalar,而不是
Character到
Stridable-让你与由单一的Unipre代码点表示的字符工作,并推动它们基于代码点。
extension UnipreScalar : Strideable { public func distance(to other: UnipreScalar) -> Int { return Int(other.value) - Int(self.value) } /// Returns a UnipreScalar where the value is advanced by n. /// /// - precondition: self.value + n represents a valid unipre scalar. /// public func advanced(by n: Int) -> UnipreScalar { let advancedValue = n + Int(self.value) guard let advancedScalar = UnipreScalar(advancedValue) else { fatalError("(String(advancedValue, radix: 16)) does not represent a valid unipre scalar value.") } return advancedScalar }}现在,您可以形成一个
CountableClosedRange<UnipreScalar>,并且可以将每个元素自由转换为
Character或,
String如果需要的话:
("A"..."Z").forEach { // You can freely convert scalar to a Character or String print($0, Character($0), String($0))}// Convert CountableClosedRange<UnipreScalar> to [Character]let alphabetCharacters = ("A"..."Z").map {Character($0)}


