포럼

Mac 이진 연산자 '>'는 'Double?' 유형의 피연산자에 적용할 수 없습니다. 그리고 '인트'

abcdefg12345

오리지널 포스터
2013년 7월 10일
  • 2017년 10월 21일
문자열의 이중 값이 10보다 큰지 확인하기 위해 if 문을 사용하려고 하지만 '이진 연산자 '>'를 'Double?' 유형의 피연산자에 적용할 수 없다는 오류가 발생하고 싶습니다. 그리고 'Int'' 내가 뭘 잘못하고 있는지 아는 사람.

스위프트 4
코드: |_+_|
나중에 형식을 지정할 수 있도록 문자열이어야하기 때문에 변수 문자열을 사용하고 있습니다.
코드: |_+_|

abcdefg12345

오리지널 포스터
2013년 7월 10일


  • 2017년 10월 21일
다른 변수를 추가하여 수정했습니다.
코드: |_+_|
반응:960디자인

0002378

정지 된
2017년 5월 28일
  • 2017년 10월 23일
Swift는 언어로서 때때로 상당히 웃기다고 생각합니다. 자바 프로그래밍에서 왔습니다. 그리고, 당신은 그 가장 좋은 예 중 하나를 꺼냈습니다.

그리고 옵션은 장점도 있지만 쓰레기 수거통의 상단 모서리에 내 컴퓨터를 부수고 싶게 만들기도 합니다.

그러나 Swift가 실제로 엉덩이를 걷어차는 곳은 폐쇄 부서입니다... 오 예! Java에도 지금은 있지만 ...

그리고 물론 Swift가 유형 선언과 그 성가신 세미콜론에서 덜 엄격하다는 사실은 ... 굉장합니다!

반응:abcdefg12345

0002378

정지 된
2017년 5월 28일
  • 2017년 10월 24일
아 잠깐, 이제 코드를 다시 보니 Double(string) 값이 Double?로 평가되며 이는 선택적 값입니다.

새로운 변수가 필요하지 않습니다. '!'를 추가하면 됩니다. Double(string)에 연결하면 작동합니다.

나는 이 경우에 Swift가 어리석은 것에 대해 틀렸다고 생각합니다. 그러나 나는 그러한 컴파일러 불만(두 개의 다른 숫자 유형을 비교할 수 없음)의 많은 경우를 접했습니다.

그린

2015년 7월 15일
포트 워스
  • 2017년 10월 24일
더 깨끗하고 신속한 솔루션은 MyValue를 double 또는 int로 저장하는 것입니다. 그런 다음 NumberFormatter를 사용하여 서식을 처리할 수 있습니다.

또는 선택적 바인딩을 사용하여 값을 래핑 해제할 수 있습니다. 강제 풀기를 사용하기 전에 먼저 이러한 방법 중 하나를 시도합니다.

그나셔729

정지 된
2005년 11월 25일
  • 2017년 10월 24일
maculateConception은 다음과 같이 말했습니다: 저는 Swift가 언어로서 매우 웃기다고 생각합니다. 특히 그렇습니다. 자바 프로그래밍에서 왔습니다. 그리고, 당신은 그 가장 좋은 예 중 하나를 꺼냈습니다.
그것은 아주 단서입니다. 문제는 OP가 선택적 값인 Swift의 기본 기능을 모른다는 것입니다. String에 숫자가 포함되어 있지 않으면 생성자 Double(String)이 분명히 실패할 수 있습니다. 그렇기 때문에 Double(String)은 Double 유형의 결과를 생성하지 않고 생성할 수 없지만 Double 유형 중 하나는 생성하지 않습니까? , 선택적 Double입니다. 그리고 선택적 Double은 Int와 비교할 수 없습니다.

당신의 '해결책'은 정말, 정말 끔찍합니다. NS ! '이 변환이 성공할 것이라고 확신합니다. 그렇지 않으면 앱을 종료하십시오'. 하자 d = 더블('1234x')! 그냥 충돌합니다. 의도적으로. nil을 확인하지 않았고 nil이었기 때문입니다.

올바른 방법은 오류를 확인하는 것입니다. 예를 들어

d = Double(MyValue), d > 10 {
// MyValue에는 숫자가 포함되어 있으며 숫자는 > 10입니다.
} 또 다른 {
// MyValue에 숫자가 없거나 숫자가<= 10.
}

안전하고 실제로 작동하는 코드를 작성하는 것이 가치가 있다고 생각한다면 Swift가 올바른 언어입니다.
반응:atmenterprises 및 ajthom90

0002378

정지 된
2017년 5월 28일
  • 2017년 10월 24일
gnasher729가 말했다: 그것은 아주 단서입니다. 문제는 OP가 선택적 값인 Swift의 기본 기능을 모른다는 것입니다. String에 숫자가 포함되어 있지 않으면 생성자 Double(String)이 분명히 실패할 수 있습니다. 그렇기 때문에 Double(String)은 Double 유형의 결과를 생성하지 않고 생성할 수 없지만 Double 유형 중 하나는 생성하지 않습니까? , 선택적 Double입니다. 그리고 선택적 Double은 Int와 비교할 수 없습니다.

학교에서 왕따를 당했습니까? 저를 공격하지 않고는 대응을 하지 못하셔서 자존감이 많이 낮은 것 같습니다.

이것이 여러분과의 처음이자 마지막 소통이 될 것입니다. 당신에게 제안 - 좀 더 공손한 방식으로 의사 소통을 시도하십시오. 그러면 인생은 훌륭해질 것입니다. 잘 지내세요.

그린

2015년 7월 15일
포트 워스
  • 2017년 10월 25일
gnasher729는 다음과 같이 말했습니다: 올바른 방법은 오류를 확인하는 것입니다. 예를 들어

d = Double(MyValue), d > 10 {
// MyValue에는 숫자가 포함되어 있으며 숫자는 > 10입니다.
} 또 다른 {
// MyValue에 숫자가 없거나 숫자가<= 10.
}

이것은 모호합니다. 값이<= 10 should produce different results from the value being nil? To be fair, the OP's post is ambiguous as they were forcing the unwrap, meaning a nil value would crash. However in most business cases, a nil value would be handled differently (safely) from an insufficient value.

훨씬 더 깨끗한 방법은 다음과 같습니다.

코드: |_+_|
하지만 MyValue는 처음부터 Double로 저장해야 하고 나중에 필요한 서식을 처리하기 위해 NumberFormatter를 구현해야 한다고 생각합니다. 이는 코드를 읽는 사람에게 훨씬 더 낮은 인지 부담을 줍니다.
반응:어멘터프라이즈

그나셔729

정지 된
2005년 11월 25일
  • 2017년 10월 26일
maculateConception은 다음과 같이 말했습니다: 학교에서 왕따를 당했습니까? 저를 공격하지 않고는 대응을 하지 못하셔서 자존감이 많이 낮은 것 같습니다.

이것이 여러분과의 처음이자 마지막 소통이 될 것입니다. 당신에게 제안 - 좀 더 공손한 방식으로 의사 소통을 시도하십시오. 그러면 인생은 훌륭해질 것입니다. 잘 지내세요.

글쎄, 나는 당신을 공격하지 않았다. 나는 당신이 Swift에 대해 거의 알지 못한다는 것을 보여주는 당신의 게시물을 공격했고 매우 위험한 권장 사항을 포함했습니다. NS

사이러스

에게
2008년 8월 21일
  • 2017년 10월 26일
나는 대부분의 시간을 보호하지만 클래스의 각 함수가 동일한 변수를 보호한다면 초기 인터페이스를 재고하고 싶을 수도 있습니다.

끼워 넣다

2018년 4월 14일
  • 2018년 4월 14일
Swift, 값이 정확히 int인지 확실하지 않습니다. 확인하는 두 가지 옵션이 있습니다.
1) '!' 표시를 추가하여 이 값이 정확함을 나타낼 수 있습니다.
코드: |_+_| 2) 값을 정의할 때 유형을 지정할 수 있습니다.
코드: |_+_| 에게

어멘터프라이즈

2006년 1월 28일
  • 2018년 4월 27일
ynstek은 다음과 같이 말했습니다: Swift, 귀하의 값이 정확히 int인지 확실하지 않습니다. 확인하는 두 가지 옵션이 있습니다.
1) '!' 표시를 추가하여 이 값이 정확함을 나타낼 수 있습니다.
코드: |_+_| 2) 값을 정의할 때 유형을 지정할 수 있습니다.
코드: |_+_|

Int 변수에 double에 문자열 캐스트를 할당하려고 하기 때문에 #2 예제가 실패할 것이라고 생각합니다. 또한 MyValue가 nil이 아니라고 가정하므로 nil이거나 숫자가 아닌 경우 런타임 오류가 발생할 수 있습니다.

귀하의 # 1 예제 설명도 옳지 않습니다. 느낌표는 값을 Int로 변환하지 않습니다. 선택적 변수 값의 래핑을 해제합니다. 귀하의 예에서는 MyValue가 nil이 아니거나 숫자가 아닌 값이 아닌 경우에만 Int가 아닌 Double 값으로 끝납니다.