将 String 转换为 Character 强制我映射 {$0},这是什么意思?

converting String to Character force me to map{$0}, what's the meaning?

写一个 randomStringGenerator() 函数,我想到了这个:

private let characters = ("0123456789" + "abcdefghijklmnopqrstuvwxyz" +
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ").characters.map{ [=10=] }

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{[=11=]} 的第二行,我对这种(有效)语法的使用感到困惑。绘制地图什么都不做是什么意思?是否有更明确的语法用于相同目的?

someString.characters returns 字符串的字符为 String.CharacterView,这是一个 CollectionType 索引 String.CharacterView.Index

对于generateRandomChar()函数来说更方便的是 由 Int.

索引的 Array

map { [=21=] }

的快捷符号
map { c in 
    return c
}

即"identity transform" 的闭包。这是在这里完成的 因为 map() 方法应用于任何序列 returns 和 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() })
}