스위프트에서 if문과 함께 범위 연산자를 사용할 수 있습니까?
범위 연산자를 사용할 수 있습니까?...
그리고...<
if 스테이트먼트 포함.다음과 같은 것이 필요합니다.
let statusCode = 204
if statusCode in 200 ..< 299 {
NSLog("Success")
}
패턴 일치 연산자를 사용할 수 있습니다.~=
:
if 200 ... 299 ~= statusCode {
print("success")
}
또는 식 패턴이 있는 스위치 문(패턴 일치 연산자를 내부적으로 사용):
switch statusCode {
case 200 ... 299:
print("success")
default:
print("failure")
}
참고:..<
상한 값을 생략한 범위를 나타내므로, 다음을 수행할 수 있습니다.200 ... 299
또는200 ..< 300
.
추가 정보:최적화 스위치를 켠 상태에서 위의 코드가 Xcode 6.3에서 컴파일된 경우 테스트를 위해
if 200 ... 299 ~= statusCode
실제로 함수 호출은 전혀 생성되지 않으며, 세 가지 어셈블리 명령만 생성됩니다.
addq $-200, %rdi
cmpq $99, %rdi
ja LBB0_1
이것은 정확히 다음에 대해 생성된 어셈블리 코드와 동일합니다.
if statusCode >= 200 && statusCode <= 299
를 사용하여 확인할 수 있습니다.
xcrun -sdk monorx swifttc -O -emit-assembly main.swift
스위프트 2 이후, 이것은 다음과 같이 기록될 수 있습니다.
if case 200 ... 299 = statusCode {
print("success")
}
if-문에 대해 새로 도입된 패턴-키워드를 사용합니다.Swift 2 - "if"의 패턴 일치도 참조하십시오.
이 버전은 패턴 매칭보다 더 읽기 쉬운 것 같습니다.
if (200 ... 299).contains(statusCode) {
print("Success")
}
이것은 오래된 실타래이지만, 제가 보기에 우리는 이것을 너무 많이 생각하는 것 같습니다.내가 보기에 가장 좋은 대답은 그냥
if statusCode >= 200 && statusCode <= 299
없습니다.
if 200 > statusCode > 299
제가 알고 있는 형태와 제안된 다른 솔루션은 읽기 어렵고 실행 속도가 느릴 수 있는 함수 호출을 수행하는 것입니다.패턴 일치 방법은 알아두면 유용한 속임수이지만, 이 문제에 잘 맞지 않는 것 같습니다.
편집:
개인적으로 패턴 매치 연산자가 끔찍하고 컴파일러가 지원하기를 바랍니다.if x in 1...100
통사론그것은 너무 직관적이고 읽기 쉽습니다.if 1...100 ~= x
401개를 제외한 4xx 오류를 확인하고 싶습니다.코드는 다음과 같습니다.
let i = 401
if 400..<500 ~= i, i != 401 {
print("yes")
} else {
print("NO")
}
저도 Range .vmx 연산자를 선호했는데, 구현이 비효율적이라는 것을 발견하기 전까지는 - https://oleb.net/blog/2015/09/swift-ranges-and-intervals/
다음과 같은 범위를 사용하여 x < 0 조건을 나타낼 수 있습니다. (Int.min..<0).sigma(x)는 정확히 동일합니다.하지만 그것은 훨씬 느립니다.contains(_:)의 기본 구현은 전체 컬렉션을 순회하며, 최악의 경우 루프를 9,500억 번 실행하는 것은 저렴하지 않습니다.
응답 상태 코드가 성공적인지 알고 싶다면, 이렇게 만드십시오.
if response.statuscode < 300 {
print("response is a success")
}
200, 201, 200, 200, 200, 300까지 반복하면 됩니다.불필요한 반복이 너무 많았습니다.이것이 도움이 되길 바랍니다! :d
언급URL : https://stackoverflow.com/questions/24893110/can-i-use-the-range-operator-with-if-statement-in-swift
'source' 카테고리의 다른 글
오류 오류:스위치에 지정되지 않은 이름 특성을 가진 양식 제어를 위한 값 접근자가 없습니다. (0) | 2023.05.17 |
---|---|
라인 번호가 없는 Bash 기록 (0) | 2023.05.17 |
스택 패널의 패딩? (0) | 2023.05.17 |
Xcode에서 빌드 타이밍을 활성화하는 방법은 무엇입니까? (0) | 2023.05.17 |
Python 3 - 인코딩/디코드 대 바이트/스트론 (0) | 2023.05.17 |