Ответ 1
screens
возвращает необязательный параметр, поэтому перед использованием фактического значения, которое вы должны разворачивать - рекомендуемый метод является необязательным связыванием:
if let screens = NSScreen.screens() {
for screen in screens {
var result : Bool = workspace.setDesktopImageURL(imgurl, forScreen: screen, options: nil, error: &error)
}
}
Подробнее о Опции
Обратите внимание, что NSScreen.screens
возвращает [AnyObject]?
, поэтому вы можете выделить массив как [NSScreen]
в необязательной привязке:
if let screens = NSScreen.screens() as? [NSScreen] {
for screen in screens {
var result : Bool = workspace.setDesktopImageURL(imgurl, forScreen: screen, options: nil, error: &error)
}
}
Добавление Отвечайте на вопрос в комментарии: почему сообщение об ошибке говорит [AnyObject]? does not have a member named generator
Необязательный тип другого типа, кроме содержащегося в нем значения (необязательно, это перечисление). Вы можете выполнять итерацию массива, но вы не можете перебирать целое число или перечисление.
Чтобы понять разницу, позвольте мне привести пример реальной жизни: вы покупаете новый телевизор на ebay, пакет отправлен вам, первое, что вы делаете, это проверить, пуст (необязательный) пакет (ноль). Как только вы убедитесь, что телевизор находится внутри, вы должны развернуть его и положить коробку в сторону. Вы не можете использовать телевизор, пока он находится в пакете. Аналогичным образом, необязательным является контейнер: это не значение, которое оно содержит, и оно не имеет одного и того же типа. Он может быть пустым или может содержать допустимое значение.