在Swift中生成一个随机单词

Dan*_*iel 4 ios swift swift2

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

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

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

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

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

JAL*_*JAL 7

我的/usr/share/dict/words文件是/usr/share/dict/words/web21934年Webster的第二国际字典的符号链接.该文件只有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)")
    }
}
Run Code Online (Sandbox Code Playgroud)

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)")
    }
}
Run Code Online (Sandbox Code Playgroud)

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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)