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?!
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.
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()
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:
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!