如何将默认值设为 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)
}
答案 0 :(得分:1)
您不能将 nil 传递给函数参数,除非该参数是 Optional。你需要重写你的函数来接受一个可选的:
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
)仅在参数不为 nil 时调用您的函数:>
.onAppear(){
if let validJsonData = jsonData {
stockInfoPerDay(jsonData: validJsonData)
}
if let validSingleJSONData = jsonData {
stockInfoSingleDay(singleJSONData: validSingleJSONData)
}
}
答案 1 :(得分:0)
您需要理想地设置它,以便您的函数接受可选项作为参数并处理函数中的 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())
让我知道这是否有帮助。