2015-07-03 79 views
4

我正在尝试探索Swift编程语言。我正在通过Swift API进行搜索,并且发现了UIReferenceLibraryViewController类。我发现如果一个单词是真实的或不是真的(.dictionaryHasDefinitionForTerm),返回一个布尔值的方法,我也寻找一种方法,可以返回一个随机单词。在Swift中生成一个随机单词

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

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

有没有人知道一种方法来生成一个随机单词?

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

+5

“我也不想使数千字的长名单” 那么,你不知道如何做到这一点,但你会排除做到这一点?你如何想象如果你不是从一组东西开始的话,你可以随便选一个_anything_?涉及甲板上随机牌的卡牌技巧需要甲板!如果我伸出空着的手说“拿一张卡片,任何卡片”,你会怎么做? – matt

+0

好吧,你会开始在房间里随意抓东西,检查它们是否是卡,如果他们不继续......但我们也已经消除了这个选项。 –

+2

从您的Mac中复制'/ usr/share/dict/words'到您的应用程序包并使用它。 – JAL

回答

6

/usr/share/dict/words文件是一个符号链接/usr/share/dict/words/web2,韦伯斯特的第二届国际字典从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)") 
    } 
} 

雨燕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)") 
    } 
} 

雨燕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) 
     } 
    } 
} 
+0

你指的是'web2' wordlist文件吗?项目目录中的任何位置都应该没问题,请确保将其复制到目标中,并且该文件在“复制软件包资源”下列出。 – JAL

2

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

LoremSwiftum

LoremSwiftum为写入夫特iOS的轻质Lorem存有发生器。它支持以不同格式(单词,句子,段落)生成文本,iOS(UIImage)的各种数据(名称,URL,日期等)和占位符图像。这是用Objective-C编写的项目LoremIpsum的重新实现。

https://github.com/lukaskubanek/LoremSwiftum

这个项目只有一个快捷文件。(〜300线) 因此,我认为阅读该文件将帮助你。

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