2016-03-21 27 views
6

ottengo l'errore "Tipo 'Ship' non ha membri pedice quando provo a fare:Il tipo non ha membri iscritti?

var coor = ship[index] 

ho cercato di fare

var coor = ship?[index] as? Coordinate 

Ma ottengo questo errore:" Impossibile utilizzare il concatenamento opzionale il valore non opzionale di tipo 'nave'"

Ecco la mia 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 è anche di tipo NSObject, NSCoding, ecc ... Gli oggetti sembrano essere nell'array quando li carico (da NSUserDefaults)? Come li tiro fuori ?!

+1

Si desidera 'ship.shipCoors?[indice] ' – dan

+0

Grazie a tutti, è stato in grado di risolvere il problema! –

+0

Il tuo getter di proprietà 'count' può essere solo' return shipCoors? .count ?? 0' btw. – dan

risposta

8

Aggiungi un pedice al tuo Ship oggetto per restituire un optional Coordinate:

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

shipCoors è dichiarato come [Coordinate]? (un array opzionale), quindi c'è il rischio che lo Ship non abbia un array in shipCoors. In questo caso restituisco nil, ma puoi invece restituire quello che vuoi.

5

Aveva problema simile a Swift 3

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

Nel mio caso, è stato un semplice caso di non aggiungere le staffe alla funzione di chiamata "()". errore del ragazzo della scuola.

vale a dire il codice qui sotto è stato il colpevole

dataModel.myFunction 

risolto con dataModel.myFunction()

0

Per il mio codice:

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

    } 
    return intArray 
} 

stavo ottenendo il seguente errore:

error: type '(Int) ->()' has no subscript members intArray.append[n]

Significa che la funzione append non utilizza pedici o []!

cambiando la linea di

intArray.append[n] 

a:

intArray.append(n) 

sarebbe risolvere l'intera questione!