我正在尝试在Swift中构建一个订单数组。有时填充它们的值是nil
。这会导致应用程序崩溃。我可以处理吗?
在下面的代码中,我遍历订单并将它们添加到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! )
有时myOrder.OrderLegDistance!
获得nil
值。我该如何处理?
答案 0 :(得分:3)
使用隐式展开通常是个坏主意。 始终安全地处理这些值。
使用guard let
或if let
确保变量在使用时具有值。
if let distance = orderLegDistance {
print("\(distance)")
}
guard let distance = orderLegDistance else {
print("Error: distance is empty")
return
}
此外,您可以使用??
定义默认值。
print("\(orderLegDistance ?? 0)") /*this will print 0 if orderLegDistance is empty*/
另外,请始终使用 camelCase 变量名而不是 PascalCase 。
答案 1 :(得分:1)
取决于您的业务规则:
如果OrderLegDistant
是强制值,您可能想要忘记'这个命令。为此,您可以使用guard
语句检查所有强制性参数。
如果OrderLegDistant
不是必需的,请更新您的模型以将此属性设置为可选,并从构造函数中删除展开(!
)。
答案 2 :(得分:1)
安全的赌注是在解开前检查nil。
var orderLegDistance = defaultValue
if myOrder.OrderLegDistance != nil {
orderLegDistance = myOrder.OrderLegDistance!
}
如果您的逻辑需要,您可以使用相同类型的检查来确定您需要忽略myOrderLegDistance
的值。