Потому что это будет боль в нормальном (и только значимом) варианте использования. Обычным вариантом использования является вызов назначенного инициализатора (initWithURL:
) или что-то, что вызывает назначенный инициализатор с реальным URL-адресом. Таким образом, во всех нормальных кодах вам придется выгружать NSURL?
каждый раз. Это быстро стало бы быстро.
Если бы это был объект Swift с нуля, тогда у него не было бы публичного init()
, но вы не можете удалить его, потому что это законный (хотя и бессмысленный) ObjC. (Ну, может быть, они могут удалить его, что может стоить радару, чтобы отметить его частным.)
Так что это компромисс с ObjC-как обычно запрограммированным и ObjC-как-юридическим синтаксисом. Многие из странностей вокруг вызова Какао от Свифта сводятся к этому.
Если ObjC dev использовал [[NSURLRequest alloc] init]
в качестве общей картины, тогда URL
, безусловно, был бы необязательным. Разработчики ObjC в значительной степени никогда не делают этого, так что это не так.
В качестве примечания, если вы находите себя в случае, когда NSURLRequest()
представляется полезным, на самом деле правильный ответ почти наверняка будет использовать NSURLRequest?
.
Похоже, что это работает, но все еще не уверен, почему шаблон дизайна вызывает не факультативный, если значение может быть nil: if request.URL как AnyObject? == nil {} – Lee
Какое намерение? Вы хотите назначить опциональную, затем проверку, чтобы узнать, назначено ли позже? Если это так, просто инициализируйте запрос позже и сделайте его необязательным. –
Цель состоит в том, чтобы понять, насколько часто возможен nillable object -> Optional - неправильное предположение. – Lee