sab*_*abi 2 swift map-function
写一个 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
}
Run Code Online (Sandbox Code Playgroud)
请注意我使用的第二行"0123...".characters.map{$0},我对这个(工作)语法的使用感到困惑。绘制地图而不执行任何操作是什么意思?是否有用于相同目的的更解释性语法?
someString.characters将字符串的字符返回为 a String.CharacterView,该字符串的CollectionType索引为
String.CharacterView.Index。
对于函数来说,有一个由 索引的whichgenerateRandomChar()会更方便。ArrayInt
map { $0 }是一个快捷符号
map { c in
return c
}
Run Code Online (Sandbox Code Playgroud)
即带有“身份转换”的闭包。此处完成此操作是因为map()应用于任何序列的方法都会返回Array:
public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下方法获得相同的结果
let characters = Array("012 ... XYZ".characters)
Run Code Online (Sandbox Code Playgroud)
备注:您的generateRandomString()函数可以简化为
func generateRandomString(length: Int) -> String {
return String((0 ..< length).map { _ in generateRandomChar() })
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |