Очень распространена идиома продолжения цикла, если какое-то условие не выполняется для элемента.
Скажем, мы хотим что-то сделать со всеми подпредставлениями определенного типа (и по какой-то причине не хотим уклоняться от типов). В идеале мы бы написали:
for view in self.subviews as [NSView] { // cast required in beta 6
if (let specificView = view as? SpecificView) == nil { // <- Error here
continue
}
// Do things at a sensible indentation level
}
Приведенный выше код завершается с ошибкой «Привязка переменной шаблона не может отображаться в выражении», как в этот вопрос.
Однако это кажется настолько распространенным шаблоном, что должен быть способ сделать это в Swift. Я что-то упускаю?
РЕДАКТИРОВАТЬ: Теперь, когда я думаю об этом, это, кажется, противоречит правилам области видимости для операторов if let
, которые ограничивают переменную только внутренним блоком.
Имея это в виду, я хотел бы немного расширить вопрос: как люди применяют этот шаблон обычно в Swift?
as [NSView]
? Или попробуйтеas? [NSView]
- person idmean   schedule 25.08.2014self.subviews
по какой-то причине является[AnyObject?]
...) - person sapi   schedule 25.08.2014nil
? Не надо этого делать, уберите это. - person idmean   schedule 25.08.2014