2017-01-31 3 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] 
] 

그러나 다음 코드로 때우기에 나는 [Any] 배열에 옵션 Double 값을 추가하려고 할 때 "모든", 신속 컴파일러는 표시를 배우고

//expression implicitly coerced from Double? to Any

을 알리는 경고가 나는 모든 것을 포함 할 수있는 모든 입력 [Any]의 배열을 나타낼 수있는 유형 Any 생각했다. 그럼 경고 메시지는 왜?

답변

1

경고 일뿐입니다. 컴파일러는 Any 내부에서 Optional을 래핑하여 이상한 일을하고 있음을 확인하기를 원합니다.

문제가되는 줄에 경고를 표시하지 않으려면 optionalDouble as Any을 작성하십시오.

+0

설명해 주셔서 대단히 감사합니다. 나는이 질문에 대한 후속 질문이나 자신의 게시물에 합당한 지 모르겠다.하지만 switch 문을 체크하고 [Any] 안의 객체가 선택적인 Double인지 알아보기 위해 무엇을 써야 하는가? 유형? – Thor

+1

매우 어렵습니다. 그게 바로 당신이 그 일을하지 말라고 경고 한 이유입니다! – matt

+0

오, 다시 친절 도움을 주셔서 감사합니다! – Thor