写一个randomStringGenerator()函数,我提出了这个:
private let characters = ("0123456789" + "abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ").characters.map{ $0 }
private func generateRandomChar() -> Character {
let index = Int( arc4random_uniform( UInt32( characters.count)))
return characters[index]
}
func generateRandomString(lenght: Int) -> String {
var string = ""
for _ in 0..<lenght {
string.append(generateRandomChar())
}
return string
}
请注意我使用"0123...".characters.map{$0}
的第二行,我对使用此(工作)语法感到困惑。映射和什么都不做是什么意思?是否有更明确的语法用于相同的目的?
答案 0 :(得分:4)
someString.characters
返回字符串的字符
String.CharacterView
,CollectionType
索引
String.CharacterView.Index
。
对于generateRandomChar()
函数,它更方便
由Array
编制索引的Int
。
map { $0 }
是
map { c in
return c
}
即。一个带有“身份变换”的闭包。这是在这里完成的
因为应用于任何序列的map()
方法返回Array
:
public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
或者,您可以使用
获得相同的结果let characters = Array("012 ... XYZ".characters)
备注:您的generateRandomString()
功能可以简化为
func generateRandomString(length: Int) -> String {
return String((0 ..< length).map { _ in generateRandomChar() })
}