在Swift中从按钮标题中输出一个double

时间:2018-04-27 08:35:56

标签: swift macos optional

我试图检索PopupButton的selectedItem的文本,将其转换为double并使用它进行一些数学计算。

在阅读并观看有关可选项的教程之后,我仍然能够了解Xcode希望我做的事情,具体如下:

let foo = Double((stundenPopup.selectedItem?.title)!)!*0.20;

(在viewDidLoad上填充了弹出按钮,并且它没有改变) 正如我读过的那样,使用它并不是一个好习惯!运营商到处都是。如果我理解正确的话!操作员强行打开包装。我真正得到的是为什么?,选择的项目是可选的,第二个!

有人能告诉我这里的光吗? 我们非常感激......

2 个答案:

答案 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的概念来完成,这是另一天的解释,我建议你阅读它。