Estoy tratando de construir una matriz de pedidos en Swift. Algunas veces los valores que se completan son nil. Esto lleva a un bloqueo de la aplicación. ¿Cómo manejo esto?

En el siguiente código, recorro los pedidos y los agrego a la matriz orders:

var orders: [order] = []
//loop
orders[i] = order(dispatchNumber: "\
(myOrder.DispatchNumber!)",orderId: "\
(myOrder.OrderId!)", source: myOrder.SourceName! , sourceAddress1: myOrder.SourceAddress! , 
    sourceAddress2: myOrder.SourceCity! + ", " + myOrder.SourceState! +
 " " + myOrder.SourceZip! , destination: myOrder.DestinationName!, 
destinationAddress1:myOrder.DestinationAddress!, destinationAddress2:
myOrder.DestinationCity! + ", " + myOrder.DestinationState! + " " +
 myOrder.DestinationZip! , loads: "\(myOrder.LoadCount!)",
 loadsDelivered: "\(myOrder.LoadsDelivered!)",  tons: "\

(myOrder.TonsCount!)", price: "$" + "\(myOrder.PayRate!)", sourceDistance: myOrder.DistanceToSource!, onewayDistance: myOrder.OrderLegDistance!,  pickupStart: myOrder.PickupBy!, earliestDelivery: myOrder.DeliverStart!,latestDelivery: myOrder.DeliverBy!,product: myOrder.ProductName! , loadsRemaining: "\(thisLoadsRemaining)", truckType: myOrder.TruckType!, notes:
 myOrder.Notes!, isStarted: myOrder.IsStarted, isOnHold: myOrder.IsOnHold, payRateType: "\(myOrder.PayRateType!)", 
isStayOn: myOrder.IsStayOn, customerName: myOrder.CustomerName! )

A veces, myOrder.OrderLegDistance! obtiene un valor nil. ¿Cómo lo manejo?

0
Ackman 28 sep. 2017 a las 19:10

2 respuestas

En general, es una mala idea usar el desenvolvimiento implícito. Siempre maneja los valores de forma segura.

Use guard let o if let para asegurarse de que las variables tengan un valor cuando trabaje con ellas.

if let distance = orderLegDistance {
    print("\(distance)")
}

guard let distance = orderLegDistance else {
    print("Error: distance is empty")

    return
}

Además, puede definir un valor predeterminado utilizando ??.

print("\(orderLegDistance ?? 0)") /*this will print 0 if orderLegDistance is empty*/

Como nota al margen, utilice siempre los nombres de variable camelCase en lugar de PascalCase .

3
Tamás Sengel 28 sep. 2017 a las 16:14

Depende de las reglas de su negocio:

  • Si OrderLegDistant es un valor obligatorio, es posible que desee 'olvidar' este pedido. Para hacerlo, puede usar una instrucción guard para verificar todos los parámetros obligatorios.

  • Si OrderLegDistant no es obligatorio, actualice su modelo para que tenga este atributo como Opcional y elimine la desenvoltura (!) de su constructor.

1
CZ54 28 sep. 2017 a las 16:14