Swift: перечисление классов не приведено к типу "AnyClass" - PullRequest
0 голосов
/ 09 июня 2019

Пользователь может иметь несколько пользовательских опций для моего приложения:

enum OptionAvailable : String {
    case NOTE_GENDER = "note_gender"
    case NOTE_AGEMIN = "note_agemin"
    case NOTE_AGEMAX = "note_agemax"
    case NOTE_ORGA   = "note_orga"
    case NOTE_DMAX   = "note_dmax"
}

И каждая опция связана с типом.Чтобы установить связь, я сделал этот массив:

static let typeForOption:[OptionAvailable:AnyClass] = [

    .NOTE_GENDER : MemberOptions.OptGenderToGrade.self, (ERROR)
    .NOTE_AGEMAX : Int.self,
    .NOTE_AGEMIN : Int.self,
    .NOTE_ORGA   : MemberOptions.GradeFrom.self,
    .NOTE_DMAX   : Int.self

]

Затем, когда пользователь установит параметр в меню параметров, мое приложение запустит запрос к моему API, вызвав функцию:

static func ApiSetOption(
    opt:MemberOptions.OptionAvailable,
    val:Any,
    completionHandler:(()->Void)? = nil,
    errorHandler:((Int,String)->Void)? = nil) throws
{
    // this is in pseudo code, just to see whats going on :

    if val is not of type typeForOption[opt] {
        throw WrongTypeError 
    }
    if typeForOption[opt] is not convertible to String {
        throw TypeNotStringifiable 
    } 
    URLRequest(.POST, "mydomain.com/set/option/\(opt.rawValue)", 
            withBody:val )

}

Проблема: я получаю сообщение об ошибке от Swift в (ОШИБКА): Невозможно преобразовать значение типа 'MemberOptions.OptGenderToGrade.Type' в ожидаемый тип значения словаря 'AnyObject.Type'

Вот класс MemberOptions.OptGenderToGrade:

enum OptGenderToGrade : String  {
    case MALE = "male"
    case FEMALE = "female"
    case BOTH = "both"

}

1 Ответ

1 голос
/ 09 июня 2019

У вас есть

static let typeForOption:[OptionAvailable:AnyClass] = [

AnyClass означает любой класс. Но ваши типы не являются типами классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...