source

스위프트에서 if문과 함께 범위 연산자를 사용할 수 있습니까?

ittop 2023. 5. 17. 23:25
반응형

스위프트에서 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

반응형