swift2 在Swift中生成随机单词

5kgi1eie  于 2022-11-23  发布在  Swift
关注(0)|答案(4)|浏览(261)

我正在尝试探索Swift编程语言。我在Swift API中搜索,找到了UIReferenceLibraryViewController类。我找到了如果一个单词是真的或假的,则返回一个bool值的方法(.dictionaryHasDefinitionForTerm),我还寻找了一个可以返回随机单词的方法。
可悲的是,这种方法似乎并不存在。我意识到我可以探索第3方API,但如果可能的话,我更喜欢远离它们。
我想也许我可以通过随机排列所有字母,然后检查他们是否形成一个真正的单词,但这似乎...嗯...愚蠢。
有谁知道一种方法来生成一个随机单词吗?
我也不想因为担心记忆错误而手动制作一个数千字的长列表。我想尝试也学习一些语法和新方法,而不是如何导航列表。

fgw7neuy

fgw7neuy1#

我的/usr/share/dict/words文件是一个指向/usr/share/dict/words/web2的符号链接,/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)")
    }
}

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)
        }
    }
}
sdnqo3pr

sdnqo3pr2#

获取长度为5的随机字。

func randomWord() -> String
    {
        var x = "";
        for _ in 0..<5{
            let string = String(format: "%c", Int.random(in: 97..<123)) as String
            x+=string
        }
        return x
     }
nc1teljy

nc1teljy3#

试试这个片段

struct RandomWordGenerator {
    private let words: [String]
    
    func ranged(_ range: ClosedRange<Int>) -> RandomWordGenerator {
        RandomWordGenerator(words: words.filter { range.contains($0.count) })
    }
}

extension RandomWordGenerator: Sequence, IteratorProtocol {
    public func next() -> String? {
        words.randomElement()
    }
}

extension RandomWordGenerator {
    init() throws {
        let file = try String(contentsOf: URL(fileURLWithPath: "/usr/share/dict/words"))
        self.init(words: file.components(separatedBy: "\n"))
    }
}
jk9hmnmh

jk9hmnmh4#

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

洛伦·斯威夫特姆

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

相关问题