我正在尝试探索Swift编程语言。我正在搜索Swift API,然后找到了UIReferenceLibraryViewController
类。我找到了一个方法,如果一个单词是真的(.dictionaryHasDefinitionForTerm
),它返回一个bool值,我也找到了一个可以返回一个随机单词的方法。
可悲的是,这种方法似乎并不存在。我意识到我可以探索第三方API,但是如果可能的话,我宁愿远离它们。
我想也许我可以通过所有字母的随机排列,然后检查它们是否形成一个真实的单词,但这似乎......好吧......愚蠢。
有人知道生成随机单词的方法吗?
我也不想手动制作数千个单词的长列表,因为我担心内存错误。我想尝试学习一些语法和新方法,而不是如何导航列表。
答案 0 :(得分:7)
我的/usr/share/dict/words
文件是1934年韦伯斯特第二国际词典/usr/share/dict/words/web2
的符号链接。该文件只有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)
}
}
}
答案 1 :(得分:2)
我建议你查看这个项目。一个人已经为你做了以下事情!
<强> 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