Этот код выдает предупреждение «Выражение неявно приведено к строке?» любому."
let email : String?;
let password : String?;
let dict = ["email": email, "password": password] as [String: Any];
Но этого кода нет.
let email : String?;
let password : String?;
let dict = ["email": email, "password": password] as [String: AnyObject];
Почему? И как мне сделать так, чтобы Any
не беспокоил меня предупреждением об опционах вроде AnyObject
?
РЕДАКТИРОВАТЬ:
Этот код также не выдает предупреждение:
let email : String;
let password : String;
let dict = ["email": email, "password": password] as [String: Any];
Но в этом случае мне нужно иметь возможность включать как объект, так и необязательность. Кажется, предупреждение появляется только в том случае, если тип переменной является как объектом , так и необязательным.
Any
может представлять экземпляр любого типа, включая типы функций и необязательные типы, аAnyObject
может представлять экземпляр любого типа класса. Итак, в вашем случаеString
Object - этоClass
Object, поэтому он не дает предупреждения. - person Rocky   schedule 06.02.2018nil
возвращается, если ключ не существует. Поэтому, если вы хотите значениеnil
, опустите ключ. И удалите конечные точки с запятой. Они бессмысленны в Swift. - person vadian   schedule 06.02.2018as [String: AnyObject]
любое значение nil автоматически не включается в окончательный словарь. И да, точки с запятой бессмысленны. Но я переключаюсь между проектом Obj C и Swift, и вместо того, чтобы продолжать расстраиваться из-за того, что забыл поставить точку с запятой при работе с Obj C, я предпочитаю ставить дополнительные точки с запятой в Swift, просто чтобы не потерять рефлекс чтобы добавить точку с запятой после оператора. - person Chen Li Yong   schedule 06.02.2018