let foo = Double((stundenPopup.selectedItem?.title)!)!*0.20;
можно читать следующим образом:
studentPopup
имеет свойство под названием selectedItem
. Если selectedItem
's title
свойство не nil
, доступ к нему. Я предполагаю, что title
также является необязательным. Таким образом, все полученное выражение будет необязательным. Разверните необязательно. Но я хочу, чтобы весь результат этого выражения в Double
. Итак, используйте конструктор Double
s. Но, ох! Конструктор Double
возвращает необязательный тип. Таким образом, разверните необязательный, чтобы получить Double
необязательный. Умножьте на 0,20, присвойте ему foo
. Готово.
Причина, по которой selectedItem
может быть необязательной, заключается в том, что человек, который спроектировал тип stundenPopup
, с ее наилучшим суждением, считает, что есть реальный шанс, что selectedItem
может иметь значение nil
в какой-то момент его жизненного цикла.
Это можно сделать, используя концепцию Optionals, которая является объяснением для другого дня, я предлагаю вам прочитать об этом.