簡體   English   中英

默認值不會設置為 Nil? - Swift

[英]Default value won't set to Nil? - Swift

如何將默認值設為 nil? 我試圖在func stockInfoPerDay(jsonData: StockInfo?)func stockInfoSingleDay(singleJSONData: StockInfoOneDay?)設為可選,但這讓我在 for 循環中遇到了麻煩......當 Force-展開,但我不想強制展開。

.onAppear(){
            stockInfoPerDay(jsonData: jsonData ?? nil) <---- *'nil' is not compatible with expected argument type 'StockInfo'*
            stockInfoSingleDay(singleJSONData: singleJSONData ?? nil) <---- *'nil' is not compatible with expected argument type 'StockInfoOneDay'*
        }


static var pricesForOneMonth: [CGFloat] = []

static var priceForOneDay: [StockInfoOneDay] = []

func stockInfoPerDay(jsonData: StockInfo) {
    
    CropPriceView.pricesForOneMonth.removeAll()
    
    for data in jsonData.data{
        CropPriceView.pricesForOneMonth.append(CGFloat(data.close))
    }   
}

func stockInfoSingleDay(singleJSONData: StockInfoOneDay){
    
    CropPriceView.priceForOneDay.removeAll()
    
    CropPriceView.priceForOneDay.append(singleJSONData)
}

您不能將 nil 傳遞給 function 參數,除非該參數是可選參數。 您需要重寫您的 function 以接受可選的:

func stockInfoPerDay(jsonData: StockInfo?) {
    
    guard let jsonData = jsonData else { return } //Exit if you are passed a nil.
    CropPriceView.pricesForOneMonth.removeAll() //Move this above the guard if you want to empty the CropPriceView when you are passed a nil.
    
    for data in jsonData.data{
        CropPriceView.pricesForOneMonth.append(CGFloat(data.close))
    }   
}

請注意,您可以處理此問題的另一種方法是單獨保留您的stockInfoPerDay() function,並使用“可選綁定”( if let )僅在參數不為零時調用您的 function:

.onAppear(){
    if let validJsonData = jsonData {
        stockInfoPerDay(jsonData: validJsonData) 
    }
    if let validSingleJSONData = jsonData {
        stockInfoSingleDay(singleJSONData: validSingleJSONData) 
    }
}

您需要對其進行理想設置,以便您的函數接受可選參數作為參數並處理函數中的 nil 情況,通常使用保護語句。 但是,既然你說你有一個問題,我不知道那個問題是什么,我可以建議將你的代碼更改為這樣的

stockInfoPerDay(jsonData: jsonData ?? StockInfo()) // <- Just make sure you have a good default initializer for the StockInfo object. Handle the possibility that jsonData was nil and StockInfo is empty inside the stockInfoPerDay function.
stockInfoSingleDay(singleJSONData: singleJSONData ?? StockInfoOneDay())

讓我知道這是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM