2017-09-17 1 views
1

Xcode 9 GM (스위프트 4)에서 볼 수 있습니다.Double 값을 Any로 변환 할 수없는 이유는 무엇입니까?

오류 : 'Double'유형의 값을 'Any type'유형으로 변환 할 수 없습니다. 코드

:

var a: Any? = +30.0 

이유는 무엇입니까?

+2

버그 (3.1 회귀), 현재처럼 보인다. 컴파일러의 혼동을 야기 할 수있는 적어도 두 개의 암시 적 변환이 있다고 생각합니다. 즉, Any가 아닌 Any 인스턴스를 Any로 변환 할 수 있으며 선택적으로 선택적이 아닐 수도 있습니다. 이 문제에 대한 공개 버그 보고서를 찾을 수없는 경우에는 직접 제출하는 것이 좋습니다. 특이하게도 부동 소수점 리터럴 (위의 사용 사례에서)에 '-' 접두어 연산자를 사용하는 것이 유효합니다. – dfri

+0

의견을 답장하면 받아 들일 것입니다. 감사. –

+0

필자는 Swift의 소스 코드를 파고 들기에 시간이 없다고 생각하기 때문에 주석으로 남겨 두겠다.하지만 다시 Swift의 JIRA에 버그 보고서를 게시하는 것이 적절할 수있다. 당신은 명확한 대답). 추측을한다면 필자는'Double ','Float','Int'가'Numeric'의''Numeric'' 구현에 대해''Numeric'' +'접두사 연산자는 숫자 리터럴의 유스 케이스에서는'-' 접두사 연산자의 과부하가 있습니다. ... – dfri

답변

1

+은 혼란을 일으키고 있습니다.

var a: Any? = 30.0 

작품입니다.

또는 당신이 Double를 생성하고 할당 할 수 있습니다 : 리터럴 부동 소수점에 과부하 접두사`+`연산자를 적용 할 때

var a: Any? = Double(+30.0) 
+0

"+"를 사용하면 논리를 문맥에서 분명하게 나타냅니다. 왜 내가 그것을 제거해야하는지 궁금하다. 모두 고마워. –

+2

이 답변은 버그 (버그?)에 대한 해결 방법을 다루고 있기 때문에 완전성을 위해 리터럴 표현식을 사용하여 비표준'Double'을 명시 적으로 생성하는 대신 리터럴 표현식을 사용하여 'Optional'을 구성 할 수 있습니다. 'wrapped type '을 지정할 필요가없는'let a : Any? = .some (+30.0)'. 두 변환 모두 암시 적 변환 계층을 제거합니다.이 변환은 형식을 추론하고 할당을 수행하지 못하는 컴파일러의 오류와 관련이 있습니다 (예 :'let a : Any = + 30.0'도 작동하며 암시 적 변환 중 하나를 제거함) . – dfri

+0

내 경우 Double (+30.0)이 작동합니다. 감사. –

관련 문제