【Swift】hogehoge.delegate=self는 무엇을 하고 있습니까?

10005 단어 XcodeSwiftiOS

입문


프로그래밍 경험: 루비 3개월.Python 3개월
스위프트가 시작된 지 9일째인 사람이 쓴다.나는 주도면밀하지 못한 점이 있다고 생각하니 반드시 지적해 주십시오.
지난번:[Swift] 저는 델리문을 사용하지 않습니다.
나는 출구를 잘 모른다.
특히
.← 이 녀석
이 녀석을 이해하기 위해 철저히 조사해 봤어.

삭제 정보


델리멘의 개념에 대해 이해하기 쉬운 사이트와 기사가 있으니 참고하세요.
Swift 언어 학습
협의와 위임에 관한 매우 간단한 견본
간단히 말하다
다른 유형에 위임 처리 또는 통지하는 메커니즘
태그 요소의 표시 속성을 수정합니다.
① 위탁처리반
② 위탁처리반과 위탁처리반의 협의
③ 위탁 처리된 반
사용자 정의 모양새를 정의합니다.

일단 설치를 해볼게요.


구조는 알겠지만 설치가 안 되면 의미가 없어요.
삭제문으로 설치해 보세요.
"TextField(inputText)에 문자열을 입력한 후return을 누르면 Label(outputText)에 입력한 문자열의 구현 내용이 표시됩니다.

ViewController.swift
import UIKit

class ViewController: UIViewController, UITextFieldDelegate { // 追加記述①

  @IBOutlet weak var inputText: UITextField!
  @IBOutlet weak var outputText: UILabel!

  override func viewDidLoad() {
    super.viewDidLoad()
    // 追加記述②
    inputText.delegate = self
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }

  // 追加記述③
  func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    let text = textField.text
    outputText.text = text
    return true
  }
}
3개의 설명을 추가하면 삭제문으로 설치할 수 있을 것 같다.
각자 뭘 하고 있는지 볼게요.

① ViewController 클래스에서 UITextFieldDelegate 프로토콜 준수 선언


나는 클래스 준수 프로토콜은 클래스 참조 프로토콜(클래스 행위를 결정하는 설계도)의 인상을 가리킨다고 생각한다.
그렇다면 왜 류에게 협의를 준수하게 하는가.
UITextFieldDelegate 프로토콜의 정의를 확인합니다.

・ UITextFieldDelegate를 선택한 후 마우스 오른쪽 버튼으로 클릭(두 손가락으로 클릭)
・Jump to Definition 클릭
(이 작업을 통해 클래스와 프로토콜의 정의를 확인할 수 있습니다.)

UITextDelegate 프로토콜에 textFieldShouldReturn 방법이 정의되어 있습니다!
다른 여러 가지 방법도 정의되어 있음을 보실 수 있습니다.
UITextFieldDelegate에 정의된 textFieldShouldReturn을 사용하기 위해서는 이 작업이 필요합니다.
요약하자면, 이 설치에서
의뢰한 클래스(ViewController)에 이 프로토콜(UITextFieldDelegate)을 사용하라고 알려주지 않았나 싶습니다.

② inputText의 delegate 알림 주소를 자신으로 설정


나 이거야.
inputText.delegate = self
제일 고전했어.일본어 번역 한번 해볼게요.
ViewController 실례를 inputext의delegate 속성에 전달합니다. 이 속성은 UITextField 클래스의 실례입니다.
태그 요소의 표시 속성을 수정합니다.이것이 무엇을 의미하는지 이해하기 어렵다.
※ 속성에 대한 참고 사이트:Swift 언어 학습
일단
inputText.delegate = self
떠나다
outputText.text = text
사용자 정의 모양새를 정의합니다.(상술한 구현 내용의 textFieldShouldReturn 방법의 네 번째 줄)
어?왠지 모양이 닮았네...
초보자라도 나는 이것이 무엇을 하는지 직관적으로 알았다.
UITextField 클래스 실례의 text 속성을 UILAbel 클래스 실례의 text 속성에 전달합니다.
UILAbel과 UITextField의 정의를 살펴보겠습니다.


둘 다 첫 줄에 텍스트 속성을 정의했는지 확인할 수 있습니다!
outputText.text = text
outputText는 UITextField 클래스의 실례입니다. 이것은 text를 outputText의 text 속성에 대입하는 것을 의미합니다.
그렇기 때문에 이런 설치를 통해 UITextField(inputText)에 입력된 문자열을 UILAbel(outputText)에 전달할 수 있습니다.
그렇다면
inputText.delegate = self
사용자 정의 모양새를 정의합니다.
이것은 ViewController의 실례를 UITextField 클래스에 전달하는 실례 inputText의delegate 속성입니다.
응응, 아까보다 더 삼킬 것 같아.
inputText는 UITextField 클래스의 인스턴스입니다.
UITextField 클래스를 확인합니다.

텍스트 속성과 같이delegate라는 속성을 정의할 수 있습니다.
일반적으로 변수를 정의할 때 유형 설명을 합니다.
open var text: String?
텍스트 속성은 문자열 유형을 선언합니다.
이것은 문자열 형식에 값을 부여할 수 있는 변수text를 정의합니다.
※ 변수 유형에 대한 참고 사이트:'알 것 같다','모르겠다'도'알겠다'는 IT 용어 사전
weak open var delegate: UITextFieldDelegate?
마찬가지로, delegate 속성 유형은 UITextFieldDelegate를 선언합니다.
UITextFieldDelegate는 계약입니다.
프로토콜 유형을 선언할 때 변수는 해당 프로토콜에 맞는 값(객체)을 저장할 수 있습니다.
즉, UITextFieldDelegate 프로토콜에 맞는 대상을 대입할 수 있는 변수delegate를 정의합니다.
※ 계약 유형 선언에 대한 참고 사이트:빠른 프로그래밍
※ 대상에 대한 참고 사이트:클래스, 객체 및 인스턴스 관계
inputText.delegate = self
inputText는 UITextField 클래스의 실례이기 때문에 이것은 inputText의delegate 속성에self를 대입했다는 것을 의미한다.
self는ViewController 클래스의 실례입니다.ViewController 클래스는 ①에서 UITextFieldDelegate 협의를 준수한다고 성명합니다.
즉, 그 실례self도 UITextFieldDelegate에 부합된다.
즉, 이것은 무엇을 의미하는가
inputText가 return을 누르면 ViewController에 알려주세요!
내 생각에는 이렇다.
return 처리를 누르면 ③에 설치됩니다.

inputText에서 UITextFieldDelegate 프로토콜에 정의된 방법을 실행한 후 ViewController(저)에게 알려주십시오!
그렇습니다.
inputText의delegate 알림 목표를 자신으로 설정
사이트에서 이런 표현을 자주 봤지만 지금까지 꼼꼼히 깨물어 마침내 이해했다.

③ delegate가 알려줄 내용을 지정합니다.


이 점을 이해한다면 ③의 설치에는 문제가 없다고 생각합니다.
의뢰하고 싶은 처리 방법과 그 후의 처리를 실현하다.
delegate가 알림을 원하는 것은 return이 눌린 시기이기 때문에 이 처리 방법을 지정합니다 textFieldShouldReturn.

총결산


일반 설명


① 성명류 준수 협의
②delegate의 알림 주소를 자신으로 설정
③ delegate가 알려줄 내용을 지정합니다.

자기의 해석


요청한 클래스:ViewController
요청한 클래스: UITextField
프로토콜: UITexgFieldDelegate
① 위탁처리된 반에 이 프로토콜을 사용하도록 알려드립니다.
② 의뢰된 클래스의 실례에서 프로토콜에 정의된 방법을 실행할 때 알려주세요(ViewController)!
③ 프로토콜에 정의된 방법의 처리를 의뢰하거나 지정합니다
①, ②, ③ 정보의 그림을 정리했다웹 사이트 축소 이미지 간단하고 알기 쉽게 총결하였다.
글로만 설명했기 때문에 생각을 정리할 수 있었다.꼭 보세요.
원숭이가 발버둥치며 스위프트의 델리게이트(Delegate)의 구조를 이해했다
이 보도도 이해하기 쉽다.
결국 일반적인 설명을 통해 이해한다.
일반적인 설명의 보조가 된다면 좋겠다.

좋은 웹페이지 즐겨찾기