6
votes

Générer un mot aléatoire dans Swift

J'essaie d'explorer le langage de programmation Swift. Je cherchais à travers l'API Swift et j'ai trouvé le UireFerenCelibraryViewController J'ai trouvé la méthode qui renvoie une valeur de bool si un mot est réel ou non ( .DictionaryHasDefinitionSorM ) et j'ai également recherché une méthode pouvant renvoyer un mot aléatoire.

Malheureusement, cette méthode ne semble pas exister. Je me rends compte que je peux explorer des API tiers, mais je préfère rester loin d'eux si possible.

Je pensais que je pouvais peut-être passer par des permutations aléatoires de toutes les lettres, puis vérifier si elles forment un vrai mot, mais cela semble ... bien ... stupide.

Quelqu'un peut-il savoir un moyen de générer un mot aléatoire?

Je ne veux pas non plus faire une longue liste de milliers de mots parce que je crains une erreur de mémoire. Je veux essayer d'apprendre également une syntaxe et de nouvelles méthodes, et non sur la manière de naviguer sur des listes.


6 commentaires

«Je ne veux pas non plus faire une longue liste de milliers de mots», vous ne savez donc pas comment faire cela, mais vous devez exclure les moyens de le faire? Comment imaginez-vous que vous pouvez choisir un aléatoire quelque chose si vous ne commencez pas avec une collection de cette chose? Une astuce de carte impliquant une carte aléatoire d'un pont nécessite un pont! Si je tiens la main vide et dites "Choisissez une carte, n'importe quelle carte", comment allez-vous le faire?


Eh bien, vous commenceriez à saisir des choses aléatoires autour de la pièce, vérifiez s'ils sont une carte, et s'ils ne continuent pas ... mais nous avons également éliminé cela comme une option.


Copier / USR / Share / dict / mots à partir de votre Mac au paquet de votre application et utilisez cela.


@Jal c'est très gentil!


Avoir une longue liste de mots provoquera une erreur de mémoire, non?


@Jal Je vais vérifier si votre réponse fonctionne, puis acceptez-la dans quelques jours. J'ai eu des problèmes avec mon ordinateur et cela devrait être fixé en 3 jours max. Désolé pour le retard.


4 Réponses :


2
votes

Je vous suggère de vérifier ce projet. Un gars a déjà fait ce qui suit pour vous!

loremswiftum

LoremswiftUn est un générateur lorem ipsum léger pour iOS écrit à Swift. Il prend en charge la génération de textes dans différents formats (mots, phrases, paragraphes), données diverses (noms, URL, dates, etc.) et images de placement pour iOS (UIIMAGE). Il s'agit d'une réimplémentation du projet Loremipsum écrit dans l'objectif-c.

https://github.com/lukaskubanek/loremswiftm

Ce projet n'a qu'un seul fichier rapide. (~ 300 lignes) Par conséquent, je pense que la lecture du fichier vous aidera.

https://github.com/lukaskubanek/loremswiftUn/blob/ Master / Sources / LoremswiftUn.swift


0 commentaires

7
votes

Mon / USR / Share / dict / Mots Code> est un lien symbolique sur / USR / Share / dict / mots / web2 code>, le deuxième dictionnaire international de Webster à partir de 1934. Le fichier n'est que de 2,4 Mo, de sorte que vous ne devriez donc pas voir trop de performances de chargement du contenu en mémoire dans la mémoire.

Voici un petit swift 3.0 Snippet J'ai écrit pour charger un mot aléatoire à partir du fichier de dictionnaire. N'oubliez pas de copier le fichier sur le paquet de votre application avant d'exécuter. P>

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 commentaires

Vous vous référez au fichier web2 dactyliste dactyliste? N'importe où dans votre répertoire de projet devrait être bien, assurez-vous de la copier sur votre cible et que le fichier est répertorié dans "Copier les ressources".



0
votes

Obtenez un mot de longueur aléatoire 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
     }


0 commentaires

0
votes

Essayez ce snippet

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


0 commentaires