我试图检索PopupButton的selectedItem的文本,将其转换为double并使用它进行一些数学计算。
在阅读并观看有关可选项的教程之后,我仍然能够了解Xcode希望我做的事情,具体如下:
let foo = Double((stundenPopup.selectedItem?.title)!)!*0.20;
(在viewDidLoad上填充了弹出按钮,并且它没有改变) 正如我读过的那样,使用它并不是一个好习惯!运营商到处都是。如果我理解正确的话!操作员强行打开包装。我真正得到的是为什么?,选择的项目是可选的,第二个!
有人能告诉我这里的光吗? 我们非常感激......答案 0 :(得分:4)
对于类型转换,您不能使用可选值 您可以做的事情如下:
guard-let
请注意,如果if-let
语句失败,则不会调用函数的其余部分
如果您确实想在语句后继续使用您的函数,可以使用if let title = stundenPopup.selectedItem?.title {
// now the title is not optional anymore
if let double = Double(title) {
// now you've successfully cast the title into a Double
let foo = double*0.2
}
}
s:
// if the title cannot be cast to Double, foo will be 0*0.2 which is still 0
let foo = (Double(stundenPopup.selectedItem?.title ?? "") ?? 0)*0.2
您还可以定义默认值,以便在无法投射标题时使用 这是一个单行代码,就像上面两个例子一样:
@PostMapping("/persons")
public ResponseEntity<PersonDto> createPerson(@RequestBody PersonDto personDto) {
try {
personService.createPerson(personDto);
return ResponseEntity.ok(personDto);
} catch (Exception e) {
return ResponseEntity.badRequest().build();
}
}
答案 1 :(得分:2)
let foo = Double((stundenPopup.selectedItem?.title)!)!*0.20;
可以理解如下:
studentPopup
有一个名为selectedItem
的属性。如果selectedItem
的{{1}}属性不是title
,请访问它。我假设nil
也是可选的。因此,整个结果表达将是可选的。打开可选项。但我想在title
中得到这个表达式的整个结果。所以,使用Double
的构造函数。但是,哦,哦! Double
的构造函数返回一个可选类型。因此,打开可选项以产生Double
非可选项。与0.20相乘,将其指定给Double
。完成。
foo
可以成为可选项的原因是,设计selectedItem
类型的人,如果有最佳判断,则认为stundenPopup
类型的人很有可能{ {1}}在其生命周期的某个时刻可能会有selectedItem
的值。
这可以使用Optionals的概念来完成,这是另一天的解释,我建议你阅读它。