programing

어떻게 신속하게 선택적 마감을 합니까?

newstyles 2023. 8. 17. 20:59

어떻게 신속하게 선택적 마감을 합니까?

저는 스위프트에서 선택적으로 종결되는 논쟁을 선언하려고 합니다.선언한 기능은 다음과 같습니다.

class Promise {

 func then(onFulfilled: ()->(), onReject: ()->()?){       
    if let callableRjector = onReject {
      // do stuff! 
    }
 }

}

그러나 Swift는 "조건부의 바운드 값은 옵션 유형이어야 한다"고 불평합니다. 여기서 "iflet"이 선언됩니다.

선택적 마감은 괄호 안에 넣어야 합니다.이는 적절한 범위를 제공합니다.?교환입니다.

func then(onFulfilled: ()->(), onReject: (()->())?){       
    if let callableRjector = onReject {
      // do stuff! 
    }
 }

코드를 더 짧게 만들기 위해 우리는 사용할 수 있습니다.nil의 기본값으로onReject매개 변수 및 선택적 체인?()그것을 부를 때:

func then(onFulfilled: ()->(), onReject: (()->())? = nil) {
  onReject?()
}

이런 식으로 생략할 수 있습니다.onReject호출 시 매개 변수then기능.

then({ /* on fulfilled */ })

또한 후행 폐쇄 구문을 사용하여 전달할 수 있습니다.onReject에의 매개 변수.then함수:

then({ /* on fulfilled */ }) {
  // ... on reject
}

여기 그것에 대한 블로그 게시물이 있습니다.

이 "선택적" 폐쇄는 단순히 아무것도 수행하지 않을 것이기 때문에 빈 폐쇄가 있는 매개변수를 기본값으로 사용할 수 있습니다.

func then(onFulfilled: ()->(), onReject: ()->() = {}){       
    // now you can call your closures
    onFulfilled()
    onReject()
}

이 함수는 이제 를 사용하거나 사용하지 않고 호출할 수 있습니다.onReject콜백

then({ ... })
then({ ... }, onReject: { ... })

스위프트의 멋진 것은 필요 없습니다.Optionals?여기!

어쩌면 더 깨끗한 방법일 수도 있습니다.특히 폐쇄에 복잡한 매개변수가 있는 경우.

typealias SimpleCallBack = () -> ()

class Promise {

func then(onFulfilled: SimpleCallBack, onReject: SimpleCallBack?){       
    if let callableRjector = onReject {
        // do stuff! 
    }
}

}

유형 별칭을 만들거나 괄호가 잘 배치된 대신 Swift의 옵션 유형 자체가 항상 있습니다.일반 Java(또는 이 경우 Swift) Generic Array 구문처럼 사용할 수 있습니다.Optional<() -> ()>문맥상 OR:

func callAClosure(firstClosure: () -> (), secondClosure: Optional<() -> ()> {
     if let secondClosure = secondClosure {
          secondClosure()    
     }
     else { firstClosure() }
}

저는 이것이 꽤 깨끗하다고 생각합니다.스위프트의 맥락에서 보너스로.일반적으로 사용할 수 있는 UI(예:struct CommonList<T: View>: View그러면 한 번만 사용되는 형식 별칭을 생성할 필요가 없습니다(해당 구조체에 대한 init 함수 포함).대신 간단한 선택적 폐쇄 매개변수를 하나 만들면 모두 완료됩니다!

이것이 문제에 부딪히고 행복한 코딩을 하는 모든 사람에게 도움이 되기를 바랍니다!

언급URL : https://stackoverflow.com/questions/24395853/how-does-one-make-an-optional-closure-in-swift