2017-01-31 15 views
0

Я в настоящее время обучение типа «Любой» в быстрой и придумали следующий кодДобавление необязательного значения в [Any], получено предупреждение о компиляторе - выражение, неявно принудительное из Double? на любой

let optionalDouble: Double? = 45.1 
let things: [Any] = [ 
    0, 
    0.0, 
    1.1, 
    optionalDouble, //expression implicitly coerced from Double? to Any 
    -4.0, 
    ("hello", 1), 
    Movie(name: "Titanic", director: "James"), 
    {(name: String) -> String in 
     return "hello \(name)" 
    }, 
    {}, 
    ["one": 1, "two": 2] 
] 

Однако, когда я попытался добавить дополнительный Double значение в [Any] массив, отображаемый быстрым компилятором предупреждение о говоря

//expression implicitly coerced from Double? to Any

Я думал, тип Any может представлять все и массив типа [Any] может содержать все. Так почему предупреждение?

ответ

1

Это только предупреждение. Компилятор хочет убедиться, что вы знаете, что делаете странную вещь, обертывая опцию внутри Any.

В строке, которая дает проблемы, напишите optionalDouble as Any, чтобы подавить предупреждение.

+0

спасибо, что получил. Я не уверен, что это считается последующим вопросом или заслуживает отдельного поста, но что мне следует писать, когда я хочу проверить оператор switch, чтобы выяснить, есть ли внутри объекта [Any] дополнительный Double тип? – Thor

+1

Это очень сложно. Именно поэтому они предупреждают вас об этом! – matt

+0

О, хорошо, еще раз спасибо за вашу любезную помощь! – Thor