У меня есть несколько словарей, которые типы:Сделать Swift (2.1) перечисления соответствует AnyObject
public typealias RESTPostDictionary = [RESTPostDictionaryKey : AnyObject]
public typealias RESTRequestDictionary = [RESTRequestDictionaryKey : AnyObject]
Я использую перечисления, потому что я хочу ключ словаря, чтобы быть только один из случаи в перечислении:
public enum RESTPostDictionaryKey : String
{
case Requests = "requests"
}
И:
public enum RESTRequestDictionaryKey : String
{
case RequestURI = "request_uri"
case HTTPMethod = "http_method"
case DataDictionary = "data_dictionary"
case RequestIdentifier = "request_identifier"
case ResponseFormats = "response_formats"
}
Поскольку мое перечисление технически String
типа, я бы-е должно было бы быть проблемой для компилятора, чтобы получить его базовое строковое значение (которое соответствует AnyObject
) и использовать это. Но я получаю предупреждение:
Cannot assign value of type ‘Array<RESTRequestDictionary>’ aka … to type 'AnyObject?’
в следующей функции:
class public func postDictionaryWithRequestDictionaries(requestDictionaries: Array<RESTRequestDictionary>) -> RESTPostDictionary
{
var postDictionary = RESTPostDictionary()
postDictionary[.Requests] = requestDictionaries
return postDictionary
}
Есть ли способ сказать компилятору, чтобы получить его String
посредством использования протокола или что-то другое, не имея полагаться на грязный и не-Swift-подобный .rawValue?
Или я делаю что-то неправильно?
Почему вы ограничивающий словарь содержать только объекты? Если вам не нужны только объекты, вы можете просто изменить 'AnyObject' на' Any' – Kametrixom
Я не знал о 'Any', но когда я использую' Any', я тогда не могу использовать словарь в качестве словаря, например, я использую метод 'NSJSONSerialization.dataWithJSONObject (postDictionary, options: [])' и получает ошибку, которая '' RESTPostDictionary 'не соответствует ожидаемому типу' AnyObject'' –
О, да, в этом случае вам нужно использовать объекты, Obj-C ничего не может обработать – Kametrixom