gpt4 book ai didi

swift - 展开 optional 包装时意外发现nil,可在iPhone上的SIM卡崩溃中工作

转载 作者:行者123 更新时间:2023-12-03 09:09:59 25 4
gpt4 key购买 nike

嗨,伙计们在展开可选错误时遇到了一个众所周知的错误。在调试器模式下运行,它在下面的行掉落。我正在使用一个隐式解包,我认为这里很好,因为我肯定会选择一个日期。可在模拟器中使用,但不适用于iPhone。

我想我可以使用if let语句来保证安全,只是想知道我将如何实现这一点,并正在寻求帮助。

希望有人能帮忙

非常感谢

if startDateTextField.text == "" || endDateTextField == "" {

let alert2 = UIAlertController(title: "Oops!", message: "Please Select an End Date!", preferredStyle: UIAlertControllerStyle.Alert)
alert2.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert2, animated: true, completion: nil)
}
else {

let start = String(startDateTextField.text)
let end = String(endDateTextField.text)
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"

guard let startDate = dateFormatter.dateFromString(start), endDate = dateFormatter.dateFromString(end) else {
print("error")
return
}

let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])
let days = components.day
let weeks = components.day / 7
let weeksanddays = days % 7
let newString = "\(weeks) weeks + \(weeksanddays) days"
resultWeeksAndDays.text = newString

最佳答案

您正在可能会产生错误的任务上使用!。您不能仅仅相信从输入(用户给出的!)中转换任何字符串都会被转换为NSDate()。您甚至可能缺少数据格式甚至输入约束。只需使用if let即可,而不是显式地解开 optional ,或者甚至更好地使用防护。到底要做什么?

代替 :

let startDate: NSDate = dateFormatter.dateFromString(start)!
let endDate: NSDate = dateFormatter.dateFromString(end)!

做:
guard let startDat = dateFormatter.dateFromString(start), endDate = dateFormatter.dateFromString(end) else {
// You don't have dates, show error, do no nothing - your choice.
return
}

并且在块之后,您100%确保可以得到对象。他们正确吗?如果您指定的格式化程序正确,则可能是。但是你有对象,那就是事实。现在,您可以继续进行操作了。

坦白说,您还应该对UI对象中的字符串getter(以下这两个)进行相同的检查,因为您可以从 View 和bam中删除一个。
let start = String(startDateTextField.text!)
let end = String(endDateTextField.text!)

关于swift - 展开 optional 包装时意外发现nil,可在iPhone上的SIM卡崩溃中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com