Вниз из «UIImage»? на «UIImage» только разворачивает варианты

Я создаю UIButton с изображением,

Я написал для этого код ниже:

  let btnImg=UIButton.buttonWithType(UIButtonType.Custom) as UIButton let img = UIImage(named: "turn_left") as UIImage btnImg.setTitle("Turn left", forState: UIControlState.Normal) btnImg.setImage(img, forState: UIControlState.Normal) btnImg.frame = CGRectMake(10, 150, 200, 45) self.view.addSubview(btnImg) 

Но я получил ошибку ниже, чтобы let img = UIImage(named: "turn_left") as UIImage :

 Swift Compiler error: Downcast from 'UIImage?' to 'UIImage' only unwraps optionals; did you mean to use '!'? 

4 Solutions collect form web for “Вниз из «UIImage»? на «UIImage» только разворачивает варианты”

Поскольку ошибка говорит, что вы должны использовать '!' ,

Попробуйте код ниже,

  let img = UIImage(named: "turn_left") as UIImage! // implicitly unwrapped 

ИЛИ

  let img : UIImage? = UIImage(named: "turn_left") //optional 

редактировать

После создания img вам нужно проверить его на nil перед его использованием.

Вы всегда можете сделать это в «if let», но обратите внимание на разницу в синтаксисе в зависимости от версии swift.

Swift <2.0 :

 if let img = img as? UIImage { 

Swift 2.0 :

 if let img = img as UIImage! { 

Обратите внимание на позицию восклицания

Если инициализатор UIImage не может найти указанный файл (или какая-либо другая ошибка), он вернет nil , согласно документации Apple

 Return Value The image object for the specified file, or nil if the method could not find the specified image. 

Поэтому вам нужно поставить чеки:

 let img = UIImage(named: "turn_left") if(img != nil) { // Do some stuff with it } 

Вам не нужно бросать UIImage в UIImage , это пустая трата.

Изменить: Полный код

 let img = UIImage(named: "turn_left") if(img != nil) { let btnImg = UIButton.buttonWithType(UIButtonType.Custom) as UIButton btnImg.setTitle("Turn left", forState: UIControlState.Normal) btnImg.setImage(img, forState: UIControlState.Normal) btnImg.frame = CGRectMake(10, 150, 200, 45) self.view.addSubview(btnImg) } 

Возможно, вы захотите добавить else одну кнопку в форму или что-то еще, что с большей вероятностью будет работать в случае, если «turn_left» не существует.

Поскольку UIImage(named:"something") возвращает необязательный (потому что он может быть равен нулю, если методы не найдут подходящее изображение, лучше всего это не явно развернуть результат (иначе ваше приложение выйдет из строя), но для проверки результат немедленно с чем-то вроде этого:

  if let image = UIImage(named: "something"){ // now you can use image without ? because you are sure to have an image here! image.description } // continue your code here using the optional power of swift's vars! :) 

Подход заключается в следующем: если изображение является необязательным, это означает, что оно может быть нулевым. Функции, которые принимают входные данные, могут обрабатывать это, в противном случае они обычно имеют неожиданное поведение. UIImage(named:) может вернуть нуль, и вам нужно справиться с этим. Если вы явно развернете его, у вас могут возникнуть проблемы позже.

if let something = ... что-то будет автоматически развернуто во время выполнения, и вы можете безопасно использовать его.

  • Условная поддержка функций iOS 6 в приложении iOS 5
  • Swift Xcode 6 дает SIGABRT при тестировании
  • Тест Uc Xcode - Как найти и нажать () элемент внутри WebView
  • Не удается передать аргументы в методы @selector?
  • График памяти Xcode - показывает увеличение использования памяти - что именно он показывает?
  • Как 32-битная архитектура отличается от 64-битной архитектуры главным образом в виде скорости приложения и управления памятью?
  • Как программно изменить ограничения, которые добавляются из раскадровки?
  • Предотвращение повторного сохранения одного и того же видео в камере iOS
  • Как вернуться в приложение, если пользователь отменит вход в Facebook?
  • Phonegap Xcode 6.1 nsexception
  • Проблема обнаружения утечки в iOS с xCode 4.3
  • Interesting Posts

    Исходная база данных NSExpression не извлекает текущие значения (iOS 5, GCD)

    IOS. Запись на 96 кГц с USB-микрофоном

    Подражать Facebook hide / show expand / contractising Панель навигации

    Как справиться с крупным проектом Swift?

    Преобразование восьмеричной строки в десятичную в Objective-C?

    Сохранение файлов cookie в приложении iOS?

    как сделать текстовое поле, чтобы принимать только 4 цифры или цифры в iphone

    Почему в моем расширении WatchKit не будут работать группы приложений?

    как сделать прямоугольник во время выполнения, чтобы соответствовать перетаскиваемой метке слов в нем.

    Как добавить действие для UIButton

    Можно ли настроить базовую линию в NSAttributedString?

    Ошибка: «Невозможно добавить сопоставление для новостей keyPath, один уже существует …»

    Где шрифт SF Mono?

    что значит свойство с «слабым» атрибутом должно быть типа объекта «действительно означает?

    как прокручивать ячейки в uitableview влево и вправо, показывая изображение слева и изображение справа

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.