티스토리 뷰
swift 공부를 하면서 꼭 알아야하는 개념 중 하나가 delegate개념인데요,
저같은 경우에는 자료들도 다 영어고 한글로 된 설명을 봐도 너무 이해하기가 어렵더라구요 :(
요 며칠간 공부를 하다가 어느정도 이해 돼서 공유하려고 해요 ㅎㅎ
시작할게요!
왕초보를 위한 delegate정리
delegate를 알려면 먼저 '프로토콜'을 알아야합니다.
delegate는 프로토콜로 구현이 되기 때문이죠.
프로토콜은 그냥 서로간의 '약속'이라고 생각하시면 될 것 같아요.
예시를 들자면 '선생님'이라는 프로토콜이 있다고 생각해 볼게요.
선생님 프로토콜은
과목명
담당 클래스
가르치다()
과제를 내다()
...
등등 여러가지를 가지고 있겠죠?
과학선생님, 영어선생님이 있다고 생각 해볼게요.
이 과학선생님과 영어선생님은 '선생님'이라는 일종의 명찰을 가지고 있는 거겠죠?
과학선생님, 영어선생님은 항상 선생님 프로토콜을 준수 해야만 합니다.
궁금증이 드실 수도 있겠지만 왜 프로토콜 상에서 가르치다(), 과제를 내다()라는 행동을 정의만하고 구현은 하지 않았을까요?
그 구현은 '선생님'이라는 프로토콜을 채택한 곳에서 이루어집니다.
애플측에서 모든 경우의 수를 생각해 구현하기 힘들기 때문이죠.
프로그래머는 함수 프로토타입을 가지고 자신만의 원하는 방향으로 구현만 하면 된답니다.
그냥 하나만 기억하세요. 프로토콜은 서로간의 지켜야할 규약입니다.
이제 delegate를 공부해봅시다.
그럼 delegate의 뜻을 한번 살펴볼까요?
클릭을 누르게 되면
라벨이 텍스트 필드에 있던 값으로 바뀌게 되겠죠?
이제 delegate를 써보겠습니다.
먼저 delegate를 쓰려면 과정이 존재한다는 것을 아시나요?
가장 먼저 해주어야 할 작업은 '채택'작업입니다.
UIViewController클래스 옆에 UITextFieldDelegate 라고 '채택'작업을 진행해주세요.
프로토콜을 '선언'했다는 잘못된 말입니다.
여러 프로토콜중 나는 UITextFieldDelegate 를 채택할게 ㅎㅎ 라는 의미에요.
그러면 먼저 @IBAction에 있는 동작들을 주석처리 해줄게요.
@IBAction func buttonClicked(_ sender: Any) {
//enteredLabel.text = textField.text;
}
그러면 이제 버튼을 눌러도 아무 동작도 하지 않게 되겠죠?
delegate를 쓰는데는 과정이 존재한다고 그랬죠? 두번째 과정입니다. 위임자를 정해주는 과정인데요.
viewDidLoad()함수에
textField.delegate = self
(textField는 아까 선언한 텍스트 필드의 @IBOutlet 이름입니다. )
@IBAction을 통해 글을 옮겨주는 것을 대신해주는 함수를 선언해볼게요.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
enteredLabel.text = textField.text
return true
}
함수를 추가해주세요.
이 textFieldShouldReturn은 UITextFieldDelegate 안에 정의되어있는 함수입니다.
우리는 이 동작을 '대신'해 줄 함수를 불러와 그 함수안에 우리가 하고싶은 일을 '구현'만 하면 된답니다.
이 함수이름을 보면 대충 무슨일을 하는 함수인지 감이오실거에요.
'텍스트필드에 사용자가 어떤 일을 하고 리턴될거다'라는 의미같죠?
그러므로 이 안에 아까 @IBAction 클릭함수에서 사용했던
enteredLabel.text = textField.text
이렇게 하고 클릭버튼이 아닌 엔터(=return)를 누르게 되면!!
짠!! 이렇게 텍스트필드에 있던 zedd가 라벨로 옮겨지게 된답니다.
도움이 되었으면 좋겠네요 :)
'iOS' 카테고리의 다른 글
iOS ) imagePicker 간단한 예제 연습 :) / 모달 뷰(modal view) (0) | 2017.01.18 |
---|---|
iOS ) 왕초보를 위한 delegate정리2 (pickerView Delegate) (11) | 2017.01.16 |
iOS ) CGRectMake의 오류? (0) | 2017.01.15 |
하나의 컨포넌트에 여러개의 액션을 추가하는 것이 가능할까? (0) | 2017.01.07 |
Intro to iOS App Development with Swift (1) | 2017.01.02 |
- github
- ios 13
- IOS
- Combine
- np-complete
- swift tutorial
- iOS delegate
- swift delegate
- swift sort
- Xcode
- WKWebView
- UIBezierPath
- fastlane
- Accessibility
- SwiftUI
- 스위프트
- Git
- actor
- FLUTTER
- 회고
- swift 공부
- swift array
- WWDC
- WidgetKit
- swift3
- 피아노
- 제이슨 파싱
- 스위프트 문법
- np-hard
- Swift
- Total
- Today
- Yesterday