2015-07-03 77 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