Как сравнить Enum в swift?

#ios #swift

#iOS #swift

Вопрос:

в Objective-C это работает нормально

введите описание изображения здесь

Не удается скомпилировать это в Swift

введите описание изображения здесь

Или

введите описание изображения здесь

Определение ALAuthorizationStatus в IOS SDK

 enum ALAuthorizationStatus : Int {
    case NotDetermined // User has not yet made a choice with regards to this application
    case Restricted // This application is not authorized to access photo data.
    // The user cannot change this application’s status, possibly due to active restrictions
    //  such as parental controls being in place.
    case Denied // User has explicitly denied this application access to photos data.
    case Authorized // User has authorized this application to access photos data.
}
  

Комментарии:

1. Пожалуйста, покажите нам ваше определение enum.

2. AssetsLibrary из IOS SDK

Ответ №1:

Оператор сравнения == возвращает a Bool , а не Boolean . Компилируется следующее:

 func isAuthorized() -> Bool {
    let status = ALAssetsLibrary.authorizationStatus()
    return status == ALAuthorizationStatus.Authorized
}
  

(Лично я нахожу сообщения об ошибках компилятора Swift иногда сбивающими с толку.
В этом случае проблема заключалась не в аргументах == , а в неправильном типе возвращаемого значения.)


На самом деле, следующее также должно компилироваться из-за автоматического вывода типа:

 func isAuthorized() -> Bool {
    let status = ALAssetsLibrary.authorizationStatus()
    return status == .Authorized
}
  

Но он завершается ошибкой компилятора «Не удалось найти член ‘Авторизованный'», если вы
явно не укажете тип status переменной:

 func isAuthorized() -> Bool {
    let status:ALAuthorizationStatus = ALAssetsLibrary.authorizationStatus()
    return status == .Authorized
}
  

Это может быть ошибка в текущем компиляторе Swift (протестировано с помощью Xcode 6 beta 1).

Обновление: первая версия теперь компилируется в Xcode 6.1.