Chr*_*ver 12 string macos xcode ios swift
简单的问题 - 希望,我正在尝试生成一个简单的字符数组,其中包括:
// trying to do something like this (pseudo code):
let letters:[Character] = map(0..<26) { i in 'a' + i }
Run Code Online (Sandbox Code Playgroud)
并尝试了以下无济于事
let a = Character("a")
let z = Character("z")
let r:Range<Character> = a..<z
let letters:[Character] = map(a..<z) { i in i }
Run Code Online (Sandbox Code Playgroud)
我意识到Swift使用Unicode,这样做的正确方法是什么?
(注意,这不是关于与传统Obj-C char互操作的问题,严格来说在Swift中进行测试等).
Mik*_*e S 17
'a'在Swift中获取初始字符代码(即在c/Obj-C中)有点麻烦,但你可以这样做:
let aScalars = "a".unicodeScalars
let aCode = aScalars[aScalars.startIndex].value
let letters: [Character] = (0..<26).map {
i in Character(UnicodeScalar(aCode + i))
}
Run Code Online (Sandbox Code Playgroud)
Dai*_*ima 17
谢谢你的有用答案.
我正在使用单线版.
let xs = (97...122).map({Character(UnicodeScalar($0))})
Run Code Online (Sandbox Code Playgroud)
要么
let xs = (0..<26).map({Character(UnicodeScalar("a".unicodeScalars.first!.value + $0))})
Run Code Online (Sandbox Code Playgroud)
如果您只想要一个已知集合的数组:
let str = "abcdefghijklmnopqrstuvwxyz"
let characterArray = Array(str)
println(characterArray)
//[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]
Run Code Online (Sandbox Code Playgroud)
Xcode 10•Swift 4.2
extension ClosedRange where Bound == Unicode.Scalar {
static let asciiPrintable: ClosedRange = " "..."~"
var range: ClosedRange<UInt32> { return lowerBound.value...upperBound.value }
var scalars: [Unicode.Scalar] { return range.compactMap(Unicode.Scalar.init) }
var characters: [Character] { return scalars.map(Character.init) }
var string: String { return String(scalars) }
}
Run Code Online (Sandbox Code Playgroud)
extension String {
init<S: Sequence>(_ sequence: S) where S.Element == Unicode.Scalar {
self.init(UnicodeScalarView(sequence))
}
}
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
let range = ClosedRange.asciiPrintable // {lowerBound " ", upperBound "~"} 32...126
let 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{|}~"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8488 次 |
| 最近记录: |