홈>
Android에서는 함수 호출 중에 인터페이스 메소드를 구현할 수 있습니다. 예를 들어 인터페이스 및 함수 선언은 다음과 같습니다.
//interface
interface exampleCallback {
void success(String response);
void error(String error);
}
//function
void exampleFunction(exampleCallback cb) {
//do something
}
그리고 함수 호출 :
exampleFunction(new exampleCallback() {
@Override
public void success(String response) {
//custom method implementation
}
@Override
public void error(String error) {
//custom method implementation
}
});
즉, 성공/오류 방법은 exampleFunction의 각 함수 호출에 대해 사용자 정의 할 수 있습니다.
그러나 일부 Google 검색 후 클래스 또는 구조체 선언에서 프로토콜 메소드를 구현하기위한 예제 코드 만 찾을 수 있으며 메소드는 더 이상 사용자 정의 할 수 없습니다. 나는 목표를 달성하기 위해 함수 매개 변수로 이스케이프 클로저를 전달할 수 있다는 것을 알고 있습니다. 즉, 각 함수 호출에 대해 콜백 함수를 사용자 정의하십시오. 하지만 프로토콜을 사용하여 비슷한 일을 할 수 있는지 궁금합니다 ...- 답변 # 1
- 답변 # 2
Java의 익명 클래스는 실제로 "일등 시민"이라는 기능이없는 경우 "해결책"입니다.
신속하게 함수는 일급 시민이므로 실제로 단일 메소드를 구현하는 익명 클래스를 전달할 필요는 없습니다. 그 방법을 전달하면됩니다 (Java 8의 람다와 비슷합니다).
이것은 자바에서 :
interface ActionListener { void actionPerformed(); }
Swift에서 클로저 유형으로 나타낼 수 있습니다 :
() -> Void
이 대신에 :
someMethod(new ActionListener() { public void actionPerformed() { ... } });
이 작업은 Swift에서 수행합니다 :
<시간>someMethod { ... }
자바 인터페이스에 구현할 메소드가 여러 개인 경우 어떻게됩니까?
이 경우 하나의 클로저를 사용하여 모든 클로저를 나타낼 수 없습니다.여러 메소드로 프로토콜을 작성하고 구조체 나 클래스로 구현하십시오. 이 패턴은
UIKit
에서 많이 볼 수 있습니다 . 뷰 및 뷰 컨트롤러에는 종종XXXDelegate
가 있습니다. .튜플 클로저 통과
관련 자료
- 신속하게 함수에서 값 반환
- linked list - C ++에서 해시 삽입 기능을 올바르게 구현하는 방법은 무엇입니까?
- 다른 클래스 iOS의 기능이 실행되지 않았습니다
- ios - swift 5 - 함수 내에서 실행할 함수를 전달하는 방법 () noobie in swift
- Xcode Playground Swift 함수 클로저 평가
- c++ - 사용자 지정 데이터 구조에서 begin () 멤버 함수를 어떻게 구현합니까?
- swift 5 - 델리게이트를 설정하려고하는데 함수가 실행되지 않습니다
- ios - 사용자 지정 신속한 파일에서 애니메이션 기능 가져 오기 실패
- Rust에서 특정 유형에 대한 구조체 함수 구현
- ios - Swift에서 Lottie 애니메이션을 사용한 클로저 기능
- ios - Swift에서 호출 된 첫 번째 함수?
- Swift 함수에서 함수가 루프 내부에 if 문이있는 for 루프를 포함 할 때 왜 'return'이 for 루프 외부에 있어야합니까?
- node.js - nestjs - 동일한 컨트롤러에서 여러 get 메서드를 구현할 수 없습니다
- generics - swift - 객체와 동일한 프로토콜을 따르는 객체 배열
- recursion - 문자열을 반환하기 위해 Swift에서 재귀 함수를 어떻게 빌드 할 수 있습니까?
- ios - ObjC 앱 빌드는 ObjC 정적 라이브러리 내에서 신속한 함수 호출에 대한 빌드 오류를 가져옵니다
- ios - swift - for in 루프가 완료되고 응답이 반환 될 때 함수 실행
- c - char 배열이 아닌 char *에 연결하는 함수를 어떻게 구현할 수 있습니까?
- node.js - aws 서버리스 함수 - aws-sdk 객체의 메서드에 액세스 할 수 없습니다… "함수가 아닙니다"
- Swift 제네릭 함수에서 인수를 캡처하는 방법
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
관련된 값으로 열거를 만들 수 있습니다 :
그리고 메소드의 완료 핸들러에서 열거 사례를 사용하여 사용자 정의 문자열을 전달하십시오.
메서드를 호출 할 때 열거를 바꾸고 거기에서 커스텀 구현을 수행하고 콜백에 반환 된 관련 값을 사용할 수 있습니다 :
운동장 샘플