어떻게 신속하게 선택적 마감을 합니까?
저는 스위프트에서 선택적으로 종결되는 논쟁을 선언하려고 합니다.선언한 기능은 다음과 같습니다.
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
'programing' 카테고리의 다른 글
단일 .sql 스크립트 파일을 사용하여 여러 테이블 만들기 (0) | 2023.08.17 |
---|---|
Google 공동 연구소: GPU에 대한 오해의 소지가 있는 정보(일부 사용자는 5%의 RAM만 사용 가능) (0) | 2023.08.17 |
다중 사이트 WordPress 설치의 하위 사이트에서 wp-admin에 액세스하면 리디렉션이 너무 많이 발생하는 이유는 무엇입니까? (0) | 2023.08.17 |
REST와 웹 서비스의 차이점 (0) | 2023.08.17 |
Mariadb가 내부 주석 코드를 실행합니다. (0) | 2023.08.17 |