반응형
신속하게 선택적 폐쇄를 만드는 방법은 무엇입니까?
선택적 클로저를 취하는 Swift에서 인수를 선언하려고합니다. 내가 선언 한 함수는 다음과 같습니다.
class Promise {
func then(onFulfilled: ()->(), onReject: ()->()?){
if let callableRjector = onReject {
// do stuff!
}
}
}
그러나 Swift는 "if let"이 선언 된 "조건부의 바운드 값은 선택 유형이어야합니다"라고 불평합니다.
선택적 클로저는 괄호로 묶어야합니다. 이것은 ?
운영자의 범위를 적절하게 지정합니다 .
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!
}
}
}
참고 URL : https://stackoverflow.com/questions/24395853/how-does-one-make-an-optional-closure-in-swift
반응형
'code' 카테고리의 다른 글
Visual Studio 프로젝트가 비어 있습니까? (0) | 2020.09.10 |
---|---|
iTunes Connect의 "버전 번호", Xcode의 "번들 버전", "번들 버전 문자열"의 차이점은 무엇입니까? (0) | 2020.09.09 |
Xamarin Forms에서 페이지를 어떻게 전환합니까? (0) | 2020.09.09 |
양식 입력 배열을 PHP 배열로 가져 오는 방법 (0) | 2020.09.09 |
작성자 이름을 마크 업하려면 어떤 HTML5 태그를 사용해야합니까? (0) | 2020.09.09 |