У меня есть несколько словарей типов:
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
- person Kametrixom   schedule 05.11.2015Any
, но когда я используюAny
, я не могу использовать словарь как словарь, например, я использую методNSJSONSerialization.dataWithJSONObject(postDictionary, options: [])
и получаю ошибку, что’RESTPostDictionary’ does not conform to expected type ‘AnyObject’
- person Adam Carter   schedule 05.11.2015