Swift의 대표
4233 단어 delegatesswiftiosdevelopment
처음에는 권한 수여가 복잡해 보일 수도 있지만, 본질적으로 해체되면 그 모델은 상당히 간단하다. 몇 번 사용한 후에 그 모델은 제2의 천성인 것 같다.
위탁 모델의 핵심은 협의이다.프로토콜 자체가 유효한 코드가 아니다.반대로 그것은 수요를 정의하는 청사진을 충당한다.이러한 요구는 일치성 대상에 정의되어야 하는 기능, 속성 등이 될 수 있기 때문에 협의를 성공적으로 준수할 수 있다.
Aprotocol는 계약 키워드와 이름으로 정의됩니다.
protocol MyProtocol {
// the protocol requirements are defined inside
var requiredString: String { get set }
func requiredFunction()
}
함수체는 기입되지 않고 이름과 입력만 정의되어 있음을 주의하십시오.이 문자열은 변수로 얻을 수 있고 설정할 수 있기 때문에 {get set}로 설명해야 합니다.대상은 이름 뒤에 사칭을 추가해서 협의를 채택한 다음에 원하는 협의를 열거하고 그 요구에 부합한다.
struct MyStruct: MyProtocol {
// this object must then conform to protocol requirements
var requiredString = “This is the conforming string”
func requiredFunction() {
print(“Here we have conformed to the function requirement with an implementation of the function”)
}
}
이 점을 이해하는 것은 매우 중요하다. 왜냐하면 권한 수여는 협의의 실시에 의존하기 때문이다.협의와 위탁은 공동으로 위탁 모델을 구성했다.내 로그 응용 프로그램 Space Log 의 예시를 살펴보자.공간 로그의 특징은 사용자가 업무 목록을 만들고 하나의 항목을 선택할 수 있도록 하는 것이다.여기서 UITableViewCell 파일에서 위임을 사용하여 셀의 단추를 눌렀는지 검사한 다음 위임 방법을 호출합니다. 이 방법은 셀과 선택한 상태에 대한 정보를 세부 보기로 전달하고 해당 검사 항목의 완성값을 업데이트합니다.
의뢰는 관련된 서로 다른 대상 사이에서 이 정보를 쉽게 전달할 수 있도록 한다.위탁 협의를 성명하는 위치부터 시작합시다.
protocol CellCheckDelegate: class {
func didChangeSelectedState(sender: CheckListTableViewCell, isChecked: Bool)
}
여기서 프로토콜은 칸과 볼 입력이 있는 함수를 필요로 합니다.프로토콜은 클래스가 귀속되어 있고class 키워드를 사용합니다. 이것은 위탁이 성명할 때 반드시 약해야 한다는 것을 의미합니다.대표는 약한 대표로 선포되어야 하기 때문에 기억에 굳게 기억되지 않고 나타나지 않도록 해야 한다strong reference cycle.이제 우리는 이 선언의 실제 행동을 보게 될 것이다.CheckListTableViewCell 파일에 정의를 의뢰합니다.그것은 약하고 가변적이며 선택할 수 있는 것이다.
weak var cellDelegate: CellCheckDelegate?
다음은 셀 단추를 누르는 IBAction을 처리하는 데 위탁 함수에 대한 호출입니다.Self는 송신자로 전송되는 칸이며, 현재 선택되었거나 선택되지 않은 상태 설정을 기반으로 하는 변수 isChecked를 전송합니다.의뢰가 선택 사항이기 때문에 self를 사용하십시오.self.cellDelegate?.didChangeSelectedState(sender: self, isChecked: isChecked)
그리고 이 호출은 협의에 부합되는 세부 컨트롤러를 호출하여 행동을 취한다.이 코드가 어디서 만들어졌는지 봅시다.우선,func tableView(_tableView:UITableView,cellForRowAt indepath:indepath)에서 칸을 선언한 후, 칸을 되돌리기 전에 칸의 의뢰를 설정합니다.
cell.cellDelegate = self
이것은 CheckListTableViewCell의 의뢰를 인용하여 CheckListTableViewCell과tableView에서 만든 셀 사이에 다리를 놓았다고 할 수 있다. (이것이 약한 의뢰라고 성명하는 것이 중요한 이유이다. 약한 키워드를 사용하지 않으면 코드 요소가 서로'유지'하여 강한 인용 순환을 만들 수 있기 때문이다.확장 중, 디테일 컨트롤러는 다음에CellCheckDelegate를 사용하고,didChangeSelectedState 함수를 작성하여 그에 부합합니다.
extension DetailViewController: CellCheckDelegate {
func didChangeSelectedState(sender: CheckListTableViewCell, isChecked: Bool) {
let path = self.tableView.indexPath(for: sender)
if let selected = path {
checkList[selected.row].isComplete = isChecked
}
}
}
CheckListTableViewCell 내의 iAction에서 위탁 함수를 호출하면 이 함수가 실행됩니다.이것은 송신자 (셀) 경로를 사용하여 수정할 검사표 항목을 찾은 다음 완성 값을 검사표 항목의 isComplete 값에 분배합니다.이 코드의 실제 작동은 리셋 프로토콜 here! 에서 확인할 수 있습니다.
위탁 모드를 사용하면 비교적 적은 코드 줄에서 이 과정을 실행하고 경량급 방식으로 실행할 수 있습니다.대표님을 더 잘 이해하는 데 도움이 됐으면 좋겠습니다. - 있으면 좋아요!💖
Reference
이 문제에 관하여(Swift의 대표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kduncanwelke/delegates-in-swift-2kfa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)