Уловка с Objective- C, конечно, заключается в его поведении, если вы отправляете какое-либо сообщение для ссылки nil
.
Во время его изобретения (1986 г.) это было на самом деле прогресс чтобы любой метод отправлялся на ссылку nil
(которая является «ошибочной» в операторе if, поскольку он 0
(число) одновременно) просто возвращает nil
(или 0
if вы интерпретируете его как число) и снова «ошибочно».
В этом смысле вы «в основном» правы, если вы делаете
if (user != nil)
в Objective- C везде, где вы видите
if let user = user {
...
}
в Свифте. Технически говоря, это не полностью то же самое, так как выражение let даст вам необнуляемую ссылку на то же содержимое, скрывающее необязательный объект для следующей области действия . Таким образом, вам не нужно больше распаковывать объект user
в области действия if. Обратите внимание, что пользователь снова будет необязательным после оператора if. Это адекватно отражено в нулевой проверке в Objective- C.
Могут быть «необычные» крайние случаи, которые вы могли бы пропустить, если автор кода Objective- C полагался на «странный» интерпретация метода, передаваемого в Objective- C. В настоящее время полагаться на них считается плохой практикой, но раньше было время, когда у нас были цепочки вызовов методов, основанные на указанном поведении. Свифт был изобретен частично, чтобы избавиться от тех иногда непреднамеренных эффектов в цепочках методов.