2017-10-26 2 views
-1

wir haben json Daten, die in ein benutzerdefinierten Objekt gesetzt wird:kann keinen Wert vom Typ ‚[CustomObject]‘ mit einem Index vom Typ ‚String‘ SUBSCRIPT

"sentMoney": [ 
       { 
        "amount": 3840.83, 
        "currency": "MXN", 
        "isMajor": false 
       }, 
       { 
        "amount": 200, 
        "currency": "USD", 
        "isMajor": true 
       } 
     ] 

public final class SentMoney: NSCoding { 
    public var currency: String? 
    public var isMajor: Bool? = false 
    public var amount: Double? 
} 

das benutzerdefinierte Objekt dann Bezug genommen wird, in eine Variable:

public var sentMoney: [SentMoney]? 

Nun, was wir versuchen zu tun, ist nur die erste Menge (3840.83).

ich es auf diese Weise versucht, zu tun, aber es gab Fehler:

let amountsOnlyArray = self.postTransferSuccess?.sentMoney.map({ $0["amount"] })//Error -Cannot subscript a value of type '[SentMoney]' with an index of type 'String' 
let firstAmountOnly = self.postTransferSuccess?.sentMoney![0]["amount"]//Error -Type 'BSentMoney' has no subscript members 

Gibt es eine bessere Art und Weise, dass die erste Menge zu bekommen?

Antwort

0

Wenn Sie die Variable sentMoney explizit deklariert als [SentMoney] haben, können Sie direkt die Eigenschaften der Objekte verwenden während das Array zugeordnet wird oder wenn für ein Element indiziert wird, wie unten.

let amountsOnlyArray = self.postTransferSuccess?.sentMoney.map({ $0.amount }) 

oder

let firstAmountOnly = self.postTransferSuccess?.sentMoney![0].amount 
0

Offenbar analysieren Sie den JSON in ein Objekt, das vom Objekt auf die Eigenschaft zugreifen möchte. Sie sollten darauf mit Punktnotation z. $0.amount

let amountsOnlyArray = self.postTransferSuccess?.sentMoney.map({ $0.amount }) 
let firstAmountOnly = self.postTransferSuccess?.sentMoney![0].amount 

bearbeiten

Hier ist ein umfassenderes Beispiel:

class SentMoney { 
    public var currency: String? 
    public var isMajor: Bool? = false 
    public var amount: Double? 
} 

let one = SentMoney() 
one.amount = 1.2 

let two = SentMoney() 
two.amount = 3.4 

let sentMoney = [one, two] 

let amountsOnlyArray = sentMoney.map({ $0.amount }) 

amountsOnlyArray // [{some 1.2}, {some 3.4}] 

sentMoney.first?.amount // 1.2 
+0

Seltsam Ich erhalte eine Fehlermeldung „Wert des Typs‚[SentMoney]‘hat kein Mitglied‚Menge‘“ auf der ersten Zeile – SwiftyJD

+0

das klingt wie Sie rufen '.amount' direkt auf dem Array, anstatt das erste Objekt zu erhalten. Vielleicht können Sie den Code teilen, den Sie verwenden, um Ihr Array von SentMoney-Objekten zu erstellen? – JoGoFo

+0

Die zweite Konstante arbeitete direkt, keine Notwendigkeit für die erste Konstante! – SwiftyJD

Verwandte Themen