2016-09-22 4 views
0

я вдруг получаю эту ошибку для словаря типа:Невозможно присвоить значение типа String типу AnyObject? Swift 3,0

var parameters = [String: AnyObject]() 

, а затем, если я стараюсь:

parameters["cancelled_by"] = someUser ?? "" 

я получаю сообщение об ошибке, как:

Не может присвоить значение типа String типу AnyObject?

Это для Swift 3.0. Что я здесь делаю неправильно? Почему это не работает?

+0

как '' someUser определенно? –

ответ

4

String - тип значения. AnyObject только принимает ссылочные типы. Таким образом, для того чтобы добавить обоих типов значений и ссылочные типы в Dictionary использования Any вместо AnyObject, т.е.

var parameters = [String: Any]() 

Это является дополнением к Swift 3.0.

+0

Спасибо за это – KexAri

1

Я начинаю с Swift 3 прямо сейчас, немного поздно ... Однако, пока Swift 2.2 некоторые Swift типы значений были автоматически мостиками соответствующих ссылочных типов фундамента, таких как String к NSString, Dictionary<> к NSDictionary, и так далее. Похоже, что это автоматическое мостовое соединение было удалено в Swift 3.

Бывают случаи, когда поворот [String : AnyObject] в [String : Any] имеет смысл, в других - нет, в зависимости от того, что вы делаете. В моем текущем случае, где мне нужны ссылочные типы, это не так.

Поэтому я решить проблему, запрашивая явные мостики, литье в AnyObject:

var dictionary: [String : AnyObject] = [:] 
dictionary["valueType"] = "Value Type" // Error 
dictionary["referenceType"] = "Reference Type" as AnyObject // OK 

Для справки:

let text = "Text" 
let asAny = text as Any 
let asAnyObject = text as AnyObject 
let asNSString: NSString = text as NSString 

type(of: text) // Prints String.Type 
type(of: asAny) // Prints String.Type 
type(of: asAnyObject) // Prints _NSContiguousString.Type 
type(of: asNSString) // Prints _NSContiguousString.Type 
Смежные вопросы