2017-06-01 1 views
0

Ich möchte das erste Element in einem bestimmten Array von benutzerdefinierten Objekten zurückgeben und ein Array von Indizes und das erste benutzerdefinierte Objektelement zurückgeben, damit ich eine Guard-Anweisung umschlingen kann es.Swift - Holen Sie sich das erste Element im Array, und geben Element und Indizes zurück

dh:

let firstOrder = existingOrders.enumerated().flatMap{$0,$1}.first

oder der Versuch # 1

let array = existingOrders.enumerated().map { (a, b) in return [$0.index : $1.element] }.first

oder der Versuch # 2

let array = existingOrders.enumerated().map { ($0.offset, $0.element) }.first 
print (array) 

Diese nicht das eigentliche Objekt zurückkehrt; und es scheint ein Tupel zurückzugeben.

wo

existingOrders = [ExistingOrder, EngineYard.ExistingOrder, EngineYard.ExistingOrder]

es die folgende Erträge;

[(0, EngineYard.ExistingOrder), (1, EngineYard.ExistingOrder), (2, EngineYard.ExistingOrder)]

Versuch # 3;

let array = existingOrders.enumerated().map { ($0.offset, $0.element) } 
    print (array) 

    guard let firstOrder = array.first else { 
     break 
    } 

    print (firstOrder) // should be a tuple of index and custom object 

Wie greife ich das optionale erste Element in einem Array und Rückgabe Index und Element?

Vielen Dank


bearbeiten. Der Grund, warum ich das mache, ist, dass ich das korrekte Objekt auf eine andere Klasse übertragen kann.

// transfer all 
    while (factory.existingOrders.count > 0) { 

     let array = myOrderBook.existingOrders.enumerated().map { ($0.offset, $0.element) } 

     guard let firstOrder = array.first else { 
      break 
     } 

     let index = (firstOrder.0) 

     factory.orderBook.transfer(index: index, destination: .completedOrder) 
    } 

Wo die Orderbook eine Klasse ist;

Factory { 
    var orderBook:OrderBook = OrderBook() 
} 

OrderBook { 
    var existingOrders: [ExistingOrder] = [ExistingOrder]() 
    var completedOrders: [CompletedOrder] = [CompletedOrder]() 
} 

Und die Idee ist, dass ich ein Objekt aus bestehenden Aufträge erledigten Aufträge und umgekehrt

Die Funktion erfordert einen Index übertragen werden soll, aber ich denke, ich es umgestalten könnte, so kann ich ein Objekt übertragen stattdessen.

+3

Bitte geben Sie ein Beispiel von dem, was Sie erreichen möchten. – PGDev

+0

Ich denke, Versuch Nr. 3 gibt mir das Ergebnis, nach dem ich suche; Ich habe ein Array von benutzerdefinierten Objekten, die ich brauche, um den ersten und seinen Index in einem Tupel zu erhalten, und der Befehl 'existingOrders.enumerated(). Map {($ 0.offset, $ 0.element)}' scheint das zu tun (zumindest in schnellen Spielplätzen) – zardon

+0

Wenn Sie wissen, dass es das erste Element ist, warum wollen Sie dann seinen Index? – PGDev

Antwort

0

Die Antwort, die ich gesucht habe, war;

let array = myOrderBook.existingOrders.enumerated().map { ($0.offset, $0.element) }

Allerdings fand ich, dass mein Code benötigt Refactoring werden.

Danke.

Problem geschlossen.

Verwandte Themen