32일차 - 21.07.09

수킴·2021년 7월 9일
0

100DaysOfSwift

목록 보기
33/37
post-thumbnail

학습키워드

  • review(복습)
  • Project 4 ~ 6

1. What you learned

  • WebKit의 이벤트가 발생했을 때 Delegation을 사용하여 ViewController에 전송하여 이에 대해 조치를 취할 수 있었습니다.
  • UIAlertControllerActionSheet스타일로 지정하는 방법도 알아보았습니다.
  • toolbarItems안에 UIBarButtonItems를 배치하여 표시한 후 .flexibleSpace를 사용하여 레이아웃을 보기좋게 설정했습니다.
  • Key-Value-Observing 을 사용하여 웹브라우저에 로딩상황을 표시할 수 있었습니다.
  • contentsOf 를 사용하여 디스크에서 텍스트파일을 로드하는 방법을 알아보았습니다.
  • UIAlertController 에 텍스트필드를 추가하여 읽고 사용할 수 있습니다.
  • 문자열 및 배열조작을 위한 contains(), remove(at:), firstIndex(of:)
  • AutoLayout , Visual Format Language

2. Key points

웹뷰 설정

class ViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }
}
  • 메인 뷰 자체를 웹뷰로 사용하기 위한 경우 viewDidLoad() 가 아닌 loadView() 뷰가 로드가 완료되기전에 정의합니다.
  • viewWKWebView 이기 때문 view.reload() 는 사용할 수 없습니다. 왜냐하면 UIView 가 아니기 때문입니다.

if let과 try?

var allWords = [String]()

if let startWordsURL = Bundle.main.url(forResource: "start", withExtension: "txt") {
    if let startWords = try? String(contentsOf: startWordsURL) {
        allWords = startWords.components(separatedBy: "\n")
    }
}

contentsOf 로 디스크에서 텍스트를 로드할 수 있습니다. 위 코드에서 텍스트를 얻을 수 있지만 실패한 경우 throw 로 예외처리를 해야합니다.

try? 는 예외처리를 nil반환을 합니다.

VFL

view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat:"V:|[label1(labelHeight)]-[label2(labelHeight)]-[label3(labelHeight)]-[label4(labelHeight)]-[label5(labelHeight)]->=10-|", options: [], metrics: metrics, views: viewsDictionary))
  • 단 한줄의코드로 제약조건을 설정할 수 있는 장점이 있습니다.
  • 동일한 높이의 5개의 레이블이 있고 각 사이에 공간이 있고 마지막레이블은 부모뷰의 가장자리와 10이상포인트 공간을 가집니다.

3. Challenge

도전과제

테이블뷰로 쇼핑목록을 만들 수 있도록 하는 앱

쇼핑목록을 지울 수 있는 왼쪽 UIBarButtonItem 추가 → 테이블뷰 셀단위로 다시 로드

joined(separator:_) : 배열에서 각 부분들을 결합하여 하나의 문자열을 생성할 수 있습니다.

링크

100 Days of Swift - Day 32 - Hacking with Swift

profile
iOS 공부 중 🧑🏻‍💻

0개의 댓글