2017-09-28 87 views
0

我想在Swift中構建一個訂單數組。有時填寫的值是nil。這導致應用程序崩潰。我該如何處理?在Swift中無值處理

在下面的代碼,我遍歷訂單,並把它們添加到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

閱讀類似於https://stackoverflow.com/questions/24003642/what-is-an-optional-value-in-swift#24026093 – DavidN

+0

簡單的方法不會崩潰:不要使用'!'操作符。你如何處理它? – Ssswift

+0

謝謝感謝幫助:) – Ackman

回答

1

安全的賭注是檢查零前解包。

var orderLegDistance = defaultValue if myOrder.OrderLegDistance != nil { orderLegDistance = myOrder.OrderLegDistance! }

您可以使用同一種檢查,以確定你需要的,如果你的邏輯要求,要忽略的myOrderLegDistance值。

+0

您可以通過'var orderLegDistance = myOrder.OrderLeftDistance? defaultValue'。 – zneak

3

使用隱式解包通常是一個糟糕的主意。 總是安全地處理值。

使用guard letif let確保變量在您使用它們時具有一個值。可以使用??來定義默認值。

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

在一個側面說明,請始終使用駝峯變量名,而不是PascalCase

+0

謝謝感謝您的幫助:) – Ackman

1

取決於你的業務規則:

  • 如果OrderLegDistant是必選的值,你可能要「忘掉」這個順序。爲了做到這一點,您可以使用guard聲明來檢查所有強制參數。

  • 如果OrderLegDistant不是必需的,請更新您的模型以將此屬性設置爲可選,並從構造函數中刪除展開(!)。

+0

感謝欣賞幫助:) – Ackman