在Swift中生成一个随机单词

我正在尝试探索Swift编程语言。 我正在搜索Swift API,我找到了UIReferenceLibraryViewController类。 如果一个单词是真的( .dictionaryHasDefinitionForTerm ),我找到了返回bool值的方法,并且我还找到了一个可以返回一个随机单词的方法。

可悲的是,这种方法似乎并不存在。 我意识到我可以探索第三方API,但如果可能的话,我更愿意远离它们。

我想也许我可以通过所有字母的随机排列,然后检查它们是否形成一个真实的单词,但这似乎……好吧……愚蠢。

有人知道生成随机单词的方法吗?

我也不想手动制作数千个单词的长列表,因为我担心内存错误。 我想尝试学习一些语法和新方法,而不是如何导航列表。

我的/usr/share/dict/words文件是一个符号链接到/usr/share/dict/words/web2 ,Webster的第二国际词典,从1934年开始。文件只有2.4mb,所以你不应该看到太多的性能命中将整个内容加载到内存中。

这是我写的一个小的Swift 3.0片段,用于从字典文件中加载一个随机单词。 请记住在运行之前将文件复制到应用程序的包中。

 if let wordsFilePath = Bundle.main.path(forResource: "web2", ofType: nil) { do { let wordsString = try String(contentsOfFile: wordsFilePath) let wordLines = wordsString.components(separatedBy: .newlines) let randomLine = wordLines[numericCast(arc4random_uniform(numericCast(wordLines.count)))] print(randomLine) } catch { // contentsOfFile throws an error print("Error: \(error)") } } 

Swift 2.2:

 if let wordsFilePath = NSBundle.mainBundle().pathForResource("web2", ofType: nil) { do { let wordsString = try String(contentsOfFile: wordsFilePath) let wordLines = wordsString.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) let randomLine = wordLines[Int(arc4random_uniform(UInt32(wordLines.count)))] print(randomLine) } catch { // contentsOfFile throws an error print("Error: \(error)") } } 

Swift 1.2片段:

 if let wordsFilePath = NSBundle.mainBundle().pathForResource("web2", ofType: nil) { var error: NSError? if let wordsString = String(contentsOfFile: wordsFilePath, encoding: NSUTF8StringEncoding, error: &error) { if error != nil { // String(contentsOfFile: ...) failed println("Error: \(error)") } else { let wordLines = wordsString.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) let randomLine = wordLines[Int(arc4random_uniform(UInt32(wordLines.count)))] print(randomLine) } } } 

我建议你查看这个项目。 一个人已经为你做了以下事情!

LoremSwiftum

LoremSwiftum是一个用Swift编写的iOS轻量级lorem ipsum生成器。 它支持生成不同格式的文本(单词,句子,段落),杂项数据(名称,URL,日期等)和iOS占位符图像(UIImage)。 这是用Objective-C编写的LoremIpsum项目的重新实现。

https://github.com/lukaskubanek/LoremSwiftum

这个项目只有单个swift文件。(~300行)因此,我认为阅读该文件会对你有帮助。

https://github.com/lukaskubanek/LoremSwiftum/blob/master/Sources/LoremSwiftum.swift