【问题标题】:Default value won't set to Nil? - Swift默认值不会设置为 Nil? - 斯威夫特
【发布时间】:2021-02-09 13:26:17
【问题描述】:

如何将默认值设为 nil? 我试图在 func stockInfoPerDay(jsonData: StockInfo?)func stockInfoSingleDay(singleJSONData: StockInfoOneDay?) 中将 StockInfo 设为可选,但这给我在 for 循环中带来了麻烦....强制展开时没有显示错误,但我不想强制展开.

.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 的情况,也许使用guard 语句。所以决定当它为 nil 时应该发生什么,并编写代码来处理这种情况。

标签: ios swift swiftui optional


【解决方案1】:

您不能将 nil 传递给函数参数,除非该参数是可选项。你需要重写你的函数来接受一个可选的:

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() 函数,并使用“可选绑定”(if let)仅在参数不为零时调用您的函数:

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

【讨论】:

    【解决方案2】:

    您需要理想地设置它,以便您的函数接受可选参数作为参数并处理函数中的 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())
    

    如果有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多