0
votes

Nsarray Element n'a pas réussi à faire correspondre le type d'élément Swift Array Type attendue NsmutableArray, mais a trouvé __nsdicaryi:

J'essaie de passer un nsmutableArray code> à partir d'un mode de vue Objective-C à une visiteuse SwiftController, le problème est que la vue Swift ViewController ne peut pas comprendre le type nsmutableArray code> type et il me donne cette erreur lorsque j'essaie d'accéder à la matrice dans Swift, je reçois cette erreur:

La condition préalable a échoué: p>

Nsarray Elément Échec de la correspondance du type d'élément de tableau SWIFT P>

NsmutableArraRay prévu mais trouvé __nsdictionaryi p> blockQuote>

J'ai essayé plusieurs solutions telles que convertir le nsmutableArraRay code> vers un tableau de chaînes SWIFT avec ce code suivant: p> xxx pré>

ou ceci: P>

let swiftArray: [String] = mutableArray.flatMap { $0 as? String }


7 commentaires

Vous avez un dictionnaire à l'intérieur non pas une chaîne, comment voulez-vous passer cela en tant que chaîne?


Je veux juste que le contrôleur de vue rapide lise le tableau


comme nsarray comme! [String] - pourquoi?


vous devez savoir ce que vous avez dans ce tableau ou même s'il s'agit d'un tableau avant que Swift ne puisse le lire comme ça


Vous avez un tableau de dictionnaire ([NSDictionary]) non [string].


Oui et j'ai besoin de le lire à Swift


C'est en fait un nsmutableArray que propose des rangées de Nsdictionnaires


3 Réponses :


0
votes

Essayez avec ceci.

if let swiftArray = objCMutableArray.mutableCopy() as? Array<Dictionary<String, AnyObject>> {

}


1 commentaires

J'ai édité ma réponse. S'il vous plaît vérifier peut être cela aide.



0
votes

La solution que j'ai trouvée est lorsque je passe la matrice, je le convertit en Nsdata afin que Swift puisse la lire à l'aide du code suivant:

@objc func setSelectedBillsData(selectedBillsData: NSData) {
    self.mData = selectedBillsData
    do {
        if let loadedStrings = try NSKeyedUnarchiver.unarchiveObject(with: selectedBillsData as Data) as? [[String:AnyObject]] {
            print(loadedStrings)
        }
    } catch {
        print("erreur.")
    }
}


3 commentaires

Pourquoi? Ce n'est pas une solution viable.


c'est la solution que j'ai trouvée, si vous avez l'alternative, puis continuez


Selon votre code précédent: var swiftarray = objcmutablarray comme nsarray comme! [String] => var swiftarray = objcmutableArray comme! [[Chaîne: anyobject]] ?



0
votes

Il devrait fonctionner

if let swiftArray = objCMutableArray as? [[String:AnyObject]]{
    print(swiftArray)
}


0 commentaires