默认值不会设置为 Nil? - 斯威夫特
Posted
技术标签:
【中文标题】默认值不会设置为 Nil? - 斯威夫特【英文标题】:Default value won't set to Nil? - Swift 【发布时间】: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 时应该发生什么,并编写代码来处理这种情况。
【参考方案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())
如果有帮助,请告诉我。
【讨论】:
以上是关于默认值不会设置为 Nil? - 斯威夫特的主要内容,如果未能解决你的问题,请参考以下文章
如何检查零值?即使考虑了 nil 值,应用程序也会崩溃。斯威夫特 [重复]