Swift中的零值处理

时间:2017-09-28 16:10:45

标签: swift

我正在尝试在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值。我该如何处理?

3 个答案:

答案 0 :(得分:3)

使用隐式展开通常是个坏主意。 始终安全地处理这些值。

使用guard letif 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的值。