티스토리 뷰
Protocol(프로토콜)
특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진
-> 규칙이라고 생각했음.
Delegate Pattern을 구현하기 위해 이용됨.
-> 특정 컨트롤에서 발생하는 이벤트를 효율적으로 관리하기 위해 대리자에게 위임하고, 실제 이벤트 발생 시에 대리자가 콜백 메서드를 호출해줌.
-> 테이블뷰를 이용할때도 delegate를 이용했었음. tableView.delegate = self를 이용해 뷰컨트롤러에게 위임한 것임.
프로토콜은 정의만하고 제시할뿐이지 실질적인 기능 구현은 채택한 클래스, 열거형 등에서 이루어져야함.
프로토콜 메서드
중괄호를 사용할 수 없고 메서드의 이름, 매개변수와 반환타입까지만 작성해야함.
이때 매개변수의 기본값을 지정할 수 없음.
타입 메서드를 요구할 땐 똑같이 static을 붙이면 됨.
프로토콜 프로퍼티
프로토콜이 프로퍼티를 요구하더라도 그 프로퍼티의 종류는 신경쓰지않음.
-> 오로지 읽기 전용, 읽고 쓰기 모두 가능하게 할지만 정하면됨.
프로토콜에서 프로퍼티를 요구할때 var를 사용한 프로퍼티로 정의함.
만약 { get set }으로 설정하였다면 let으로 선언할 수 없으며, 읽기 전용으로도 선언할 수 없음.
하지만 { get }으로 설정한 경우엔 set을 추가로 구현해도됨.
옵셔널 프로토콜
테이블뷰에서도 확인할 수 있듯이 필수 구현 메서드는 두 가지였음. 하지만 더 많은 메서드가 담겨있었음
-> 옵셔널로 설정한 것.
앞에 optional만 붙여주면 되지만 @objc를 통해 오브젝트씨에서도 참조할 수 있게끔 구현해야함.
하지만 오브젝트씨에는 클래스만 존재하므로 클래스에서만 구현 가능.
또한 이 프로토콜을 클래스에서만 채택되게 할 수 있는 방법도 있음.
선언한 프로토콜에 AnyObject를 적어주면됨.
이전에 사용했던 열거형의 CaseIterable도 프로토콜임
allCases로 배열처럼 이용했던 기억이 있음.
-> allCases도 CaseIterable이라는 프로토콜이 요구하는 프로퍼티.
Collection type이란?
마찬가지로 Collection protocol이 있음.
-> 이 프로토콜을 채택하고 준수하는 타입을 컬렉션 타입이라고 하는듯
프로토콜 내부를 보면 흔히 사용하던 index, count, randomElement 등 익숙한 메서드들을 볼 수 있음.
-> 즉, 우리가 배열이나 딕셔너리에서 저런 메서드를 사용할 수 있었던 이유는 Collection이라는 프로토콜을 준수하고있기때문.
delegate와 dataSource의 차이
정확하게는 모르겠지만 delegate는 기능(동작)을 담당하고, dataSource는 화면에 보여주는 것을 담당하는 느낌.
그래서 보여지는 것을 따로 작성해야하는 tableView, collectionView, PickerView같은 것은 dataSource가 있지만 textView같이 따로 설정하지않아도 되므로 delegate만 있는듯.
TextView에 placeholder(따로 간단하게 글써서 정리)
-> 실제로 기능이 없기때문에 있는 것처럼 구현해야함.
UIPickerView
PickerView도 보여지는 부분을 설정해야 하기때문에(components)등 datasource가 필요.
위의 작성한 코드와 영상을 보면 어떤 메서드가 어떤 역할을 하는지 알 수 있음.
numberOfComponents
-> 2이므로 두 개로 picker가 나눠짐
numberOfRowsInComponent
-> 컴포넌트 하나에 몇 개의 row가 있게 할건지 (테이블뷰의 메서드와 비슷)
didSelectRow
-> 스크롤이 멈추면 실행되는 코드
titleForRow
-> Picker에 보여지는 이름
웹뷰 사용해보기
뷰컨트롤러에 WebKit View를 추가해주고 Outlet연결
아래의 코드에 url만 넣으면 웹페이지가 뜸.
func openWebPage(url: String) {
guard let url = URL(string: url) else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
webView.load(request)
}
초기 url은 애플홈페이지의 url로 지정
SearchBar를 이용하여 웹페이지 이동
UISearchBarDelegate를 이용하여 리턴키를 눌렀을때 openWebPage의 url에 "https:// + searchbar.text"가 들어가도록함.
위의 웹뷰를 보면 툴바를 이용해 리로드, 뒤로가기, 앞으로가기 버튼을 구현하였음.
버튼 기능을 구현하는 것은 일반적인 버튼과 똑같았음.
버튼 사이의 간격은 아래의 오브젝트로 해결 가능.
뒤로가기, 앞으로가기, 리로드는 모두 WKWebView에 기본적으로 있는 메서드라서 구현할 필요가 없음.
'TIL' 카테고리의 다른 글
[TIL] 2022 / 07 / 30 (0) | 2022.07.30 |
---|---|
[TIL] 2022 / 07 / 29 (0) | 2022.07.30 |
[TIL] 2022 / 07 / 27 (0) | 2022.07.27 |
[TIL] 2022 / 07 / 26 (0) | 2022.07.26 |
[TIL] 2022 / 07 / 25 (0) | 2022.07.26 |
- Total
- Today
- Yesterday