Swift: generate an array of (Swift) characters Swift: generate an array of (Swift) characters ios ios

Swift: generate an array of (Swift) characters


It's a little cumbersome to get the initial character code (i.e. 'a' in c / Obj-C) in Swift, but you can do it like this:

let aScalars = "a".unicodeScalarslet aCode = aScalars[aScalars.startIndex].valuelet letters: [Character] = (0..<26).map {    i in Character(UnicodeScalar(aCode + i))}


Thanks for useful answers.

I'm using one-liner version.

let xs = (97...122).map({Character(UnicodeScalar($0))})

or

let xs = (0..<26).map({Character(UnicodeScalar("a".unicodeScalars.first!.value + $0))})


Xcode 12.5 • Swift 5.4

extension ClosedRange where Bound == Unicode.Scalar {    static let asciiPrintable: ClosedRange = " "..."~"    var range: ClosedRange<UInt32>  { lowerBound.value...upperBound.value }    var scalars: [Unicode.Scalar]   { range.compactMap(Unicode.Scalar.init) }    var characters: [Character]     { scalars.map(Character.init) }    var string: String              { String(scalars) }}

extension String {    init<S: Sequence>(_ sequence: S) where S.Element == Unicode.Scalar {        self.init(UnicodeScalarView(sequence))    }}

let characters = ("a"..."z").characters  // "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]let string = ("a"..."z").string          // "abcdefghijklmnopqrstuvwxyz"

let range = ClosedRange.asciiPrintable         // {lowerBound " ", upperBound "~"}   32...126let characters = range.characters  // [" ", "!", """, "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~"]let string = range.string          // " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"