web-dev-qa-db-fra.com

Type N'a pas de membres avec indice?

Je reçois le message d'erreur "Type 'Ship' n'a pas de membre en indice lorsque j'essaie de le faire:

var coor = ship[index]

J'ai essayé de faire

var coor = ship?[index] as? Coordinate

Mais j'obtiens cette erreur: "Je ne peux pas utiliser de chaînage optionnel sur une valeur non optionnelle de type 'Ship'"

Voici ma classe Ship:

import Foundation

class Ship: NSObject, NSCoding {

    var shipCoors: [Coordinate]?

    var count: Int {
        var count = 0
        for _ in shipCoors! {
            count++
        }
        return count
    }

    init(shipCoors: [Coordinate]) {
        self.shipCoors = shipCoors
    }

    required init(coder decoder: NSCoder) {
        self.shipCoors = decoder.decodeObjectForKey("shipCoors") as? [Coordinate]
    }

    func encodeWithCoder(coder: NSCoder) {
        coder.encodeObject(shipCoors, forKey: "shipCoors")
    }
}

La classe Coordinate est également de type NSObject, NSCoding, etc ....__ Les objets semblent se trouver dans le tableau lorsque je les charge (de NSUserDefaults)? Comment puis-je les sortir?! 

8
Mr_CryptoPrime

Ajoutez un indice à votre objet Ship pour renvoyer une Coordinate facultative:

subscript(index: Int) -> Coordinate? {
    guard let coordinate = shipCoors?[index] else {
        return nil
    }
    return coordinate
}

shipCoors est déclaré en tant que [Coordinate]? (un tableau facultatif), il existe donc un risque qu'une Ship ne possède pas de tableau dans shipCoors. Dans ce cas, je retourne nil, mais vous pouvez retourner ce que vous voulez à la place.

9
JAL

Avait un problème similaire dans Swift 3

Type '() -> [myObject]' has no subscript members

Dans mon cas, il s’agissait simplement de ne pas ajouter de crochets à l’appel de fonction "()". erreur d'écolier.

c'est-à-dire que le code ci-dessous était le coupable

dataModel.myFunction

Résolu avec dataModel.myFunction()

7
Naishta

Vous devez explicitement ajouter un support de souscription à la classe pour pouvoir utiliser la syntaxe de souscription, par exemple. ship[index].

Voici la documentation qui couvre l’indice et comment l’ajouter à votre classe:

https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Subscripts.html

1
Daniel Hall

Pour mon code:

func takeN(_ numbers: Int...) -> [Int]{
    var intArray : [Int] = []
    for n in numbers{
        intArray.append[n]

    }
    return intArray
}

Je recevais l'erreur suivante:

error: le type '(Int) -> ()' n'a aucun membre en indice intArray.append [n]

Cela signifie que la fonction append n'utilise pas d'indices ni []

changer la ligne de 

intArray.append[n]

à:

intArray.append(n)

résoudrait tout le problème!

0
Honey