Ответ 1
AnyObject
существует для совместимости с Objective-C. Вы можете помещать объекты только в массив [AnyObject]
, который может интерпретировать Objective-C. Swift перечисления не совместимы с Objective-C, поэтому вам нужно преобразовать их в нечто, что есть.
var x: AnyObject = [0, 1]
работает, потому что Swift автоматически обрабатывает перевод Int
в тип NSNumber
, который может обрабатывать Objective-C. К сожалению, такого автоматического преобразования для Swift нет, поэтому вам нужно сделать что-то вроде:
var y: AnyObject = [E.a.rawValue, E.b.rawValue]
Это предполагает, что ваш перечисление имеет базовый тип, который Objective-C может обрабатывать, например String
или Int
.
Другой пример того, что не работает, является необязательным.
var a: Int? = 17
var b: AnyObject = [a] // '[Int?]' is not convertible to 'AnyObject'
Подробнее см. Работа с Cocoa Типы данных.