2014-10-01 103 views
8

簡單的問題陣列 - 希望,我想生成字符的簡單數組,事中的靜脈:斯威夫特:生成(SWIFT)字符

// trying to do something like this (pseudo code): 
let letters:[Character] = map(0..<26) { i in 'a' + i } 

,並曾嘗試以下無濟於事

let a = Character("a") 
let z = Character("z") 
let r:Range<Character> = a..<z 
let letters:[Character] = map(a..<z) { i in i } 

我意識到Swift使用Unicode,做這種事情的正確方法是什麼?

(注意,這不是一個關於與傳統Obj-C字符交互的問題,嚴格在Swift中進行測試等)。

回答

12

這是一個有點麻煩,以獲得初始字符代碼斯威夫特(即C /的OBJ-C 'a'),但你可以做到這一點像這樣:

let aScalars = "a".unicodeScalars 
let aCode = aScalars[aScalars.startIndex].value 

let letters: [Character] = (0..<26).map { 
    i in Character(UnicodeScalar(aCode + i)) 
} 
+0

謝謝,正試圖在文檔中查找映射;不能。 PS。想嘗試切線相關的獎金問題? http://stackoverflow.com/questions/26152604/swift-slice-startindex-always-0 ;-) – 2014-10-02 00:22:58

+0

是的,它沒有很好的記錄;你基本上需要挖掘自動生成的頭文件,看看你能做些什麼;) – 2014-10-02 00:24:54

2

如果你只是想要一組已知的數組:

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] 
+0

對,我知道我可以鍵入出來,但不知道如何將字符作爲你的C/Obj-將映射C等謝謝 – 2014-10-01 23:59:07

+0

好吧對不起,我只知道斯威夫特。 – 2014-10-02 00:12:59

11

感謝您的有用答案。

我正在使用單線版本。

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

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

我喜歡單線程;但是我發現我需要解開UnicodeScalar()的輸出,如下所示:let xs =(0 .. <26).map({Character(UnicodeScalar(「a」.unicodeScalars.first!.value + $ 0)!) }) – 2017-06-14 16:33:21

-1

您可以簡單地使用 let alphabets: [UnicodeScalar] = Array("A"..."Z")

+0

這不起作用。它在我的操場上顯示錯誤 – adev 2017-07-06 22:49:24

+0

您可以使用範圍'「A」...「Z」來創建從'A'到'Z'的範圍,但是'Array()'不會返回這些字母的數組 – Grubas 2017-10-10 17:17:04