Я довольно озадачен этим. Если мы возьмем метод cellForRowAtIndexPath:
в UITableView
, например, его подпись метода:
func cellForRowAtIndexPath(_ indexPath: NSIndexPath!) -> UITableViewCell!
И его возвращаемое значение:
Объект, представляющий ячейку таблицы или nil, если ячейка не видна, или indexPath вне диапазона.
Это звучит как идеальная причина использовать стандартный вариант. Фактически, поскольку все типы, основанные на указателях в Objective-C, могут быть nil... кажется, имеет смысл, что все типы указателей Objective-C должны быть импортированы в качестве стандартных опций.
Я знаю из разговоров WWDC, что они говорят, что для неявно развернутых опций:
- Может быть проверено явно для nil
- Может напрямую обращаться к свойствам/методам базового значения
- Может быть неявно преобразовано в его базовое значение
И от Apple С помощью Swift с Cocoa и Objective-C:
Когда вы получаете доступ к значению этого типа необязательного типа без его безопасного развертывания вначале, неявно развернутая опция проверяет, отсутствует ли значение. Если значение отсутствует, возникает ошибка времени выполнения.
Итак, вместо того, чтобы импортировать возможно значение nil в Swift как необязательное, они решили импортировать его как что-то, что заявляет, что это никогда не должно быть nil... но может быть? Похоже, что они полностью отрицали безопасность дополнительного типа в Swift для API Objective-C, делая это. Что мне кажется недостающим?
Вместо того, чтобы давать ошибку времени компиляции или предупреждение, они решили, что ошибка во время выполнения была лучше? Это очень запутанно.
Учитывая, что ничто не отвечает на этот вопрос, который я видел... Я думаю, что это что-то очевидное для всех, что я просто не вижу, но... Почему так?
Действительно ли это просто для того, чтобы люди не могли использовать if let
или необязательную цепочку при использовании API Objective-C в Swift или что-то еще?