wake-up-neo.net

Typ hat keine Abonnentenmitglieder?

Ich erhalte die Fehlermeldung "Typ 'Ship' hat keine Indexmitglieder, wenn ich versuche, Folgendes zu tun:

var coor = ship[index]

Ich habe versucht zu tun

var coor = ship?[index] as? Coordinate

Ich erhalte jedoch diese Fehlermeldung: "Optionale Verkettung für nicht-optionalen Wert des Typs" Schiff "kann nicht verwendet werden."

Hier ist meine Ship-Klasse:

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

Die Coordinate-Klasse hat auch den Typ NSObject, NSCoding usw. Die Objekte scheinen sich im Array zu befinden, wenn ich sie lade (von NSUserDefaults)? Wie bekomme ich sie raus ?! 

8
Mr_CryptoPrime

Fügen Sie Ihrem Ship-Objekt ein Index hinzu, um eine optionale Coordinate zurückzugeben:

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

Da shipCoors als [Coordinate]? (ein optionales Array) deklariert ist, besteht das Risiko, dass eine Ship kein Array in shipCoors enthält. In diesem Fall gebe ich nil zurück, aber Sie können stattdessen zurückgeben, was Sie möchten.

9
JAL

Hatte ein ähnliches Problem in Swift 3

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

In meinem Fall war es ein einfacher Fall, die Klammern nicht zum Funktionsaufruf "()" hinzuzufügen. Schuljungenfehler.

der unten stehende Code war der Schuldige

dataModel.myFunction

Gelöst mit dataModel.myFunction()

7
Naishta

Sie müssen der Klasse explizit Subskriptionsunterstützung hinzufügen, um die Indexsyntax zu verwenden, z. ship[index].

Hier sind die Dokumente, die die Subskription abdecken und wie Sie Ihrer Klasse Subskriptionen hinzufügen können:

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

1
Daniel Hall

Für meinen Code:

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

    }
    return intArray
}

Ich habe folgende Fehlermeldung erhalten:

fehler: Typ '(Int) -> ()' hat keine Indexmitglieder intArray.append [n]

Dies bedeutet, dass die append-Funktion keine Subskripte oder [] verwendet! 

Ändern der Zeile von 

intArray.append[n]

zu:

intArray.append(n)

würde das ganze Problem lösen!

0
Honey