아래 같은 상황처럼 Detail VC (내용수정) -> 저장 -> 화면 dismiss -> Main VC에 반영 위의 기능을 해보려고 합니다. ViewController 간에 데이터를 전달하는 방법은 Notification, Delegate 등이 있는데 오늘은 Delegate를 이용한 데이터 전달 방법에 대해 공부해 보겠습니다. Detail VC (데이터를 보내는곳) Delegate 패턴을 적용하기 위해선 protocol을 사용해야 하는데요. 해당 protocol은 채택, 준수, 대리자 위임을 해줘야 합니다. 먼저 protocol을 생성해 줍니다. (SendDataDelegate) // DetailViewController.swift protocol SendDataDelegate { // 프로토콜 선언 ..
앱을 만들다가 CollectionViewCell에 데이터가 없을때 즉, Empty state일때 아무것도 없는 화면 보다 데이터 추가를 유도 하는 문구를 나타내는게 필요할것 같아 공부해봤습니다. 먼저 UICollectionView의 Extension에 아래 두개 메소드를 추가해줍니다. // Extension.swift import Foundation import UIKit // MARK: UICollectionView extension UICollectionView { // 1 func setEmptyMessage(_ message: String) { let messageLabel: UILabel = { let label = UILabel() label.text = message label.textCol..
터미널로 iTerm을 자주쓰는데 한줄삭제, 단어삭제 등 단축키가 다르고, 가끔씩 안되는 경우가 생겨 단축키 설정하는 방법을 찾고 또찾고 하기 귀찮아서 이번기회에 블로깅 해보려고 합니다. 단축키를 바꾸려면 아래 화면으로 이동 해주세요. iTerm ▶︎ Preference ( ⌘ + , ) ▶︎ Keys 삭제 한줄 삭제 단축키 변경 (⌘ + delete) 단어 삭제 단축키 변경 (⌥ + delete) 저는 주로 사용하는 단축키가 한줄삭제, 단어삭제 라서 이 두개만 정리했는데요. 추후 더 좋은 단축키가 있다면 추가로 올리겠습니다. 😄 참고 hyesun03
GCD 공부를 하다가 아니 async는 일을 기다리지 않고 여러개 처리를 하는거고 Concurrent는 동시성인데 같은뜻 아닌가? 의문이 생겼습니다. Thread1 , Thread2 가 있다고 가정 비동기(Async) Thread1작업을 Thread2에서 하도록 시킨 후, 해당 작업이 끝나는걸 기다리지 않고 다음일을 이어 진행한다. 동기(Sync) Thread1작업을 Thread2에서 하도록 시킨 후, 해당 작업이 끝날때 까지 기다렸다가 다음일을 진행한다. Thread1, Thread2, Thread3, Thread4 가 있고 대기열(queue)에 대기중인 작업이 있다고 가정 Serial queue (직렬 큐) 큐(Queue)에 등록된 작업을 한번에 하나씩 처리합니다. 항상 순서가 보장 됩니다. Conc..
이번주에 몸이 안좋아 PCR검사를 했는데 양성이 나오고 코로나 확진 판정을 받았습니다.. 집안에서 다들 마스크 끼고 7일동안 자가격리라 너무 답답하네요 상당히 아프니 다들 코로나 항상 조심하세요 ㅠㅠ 그래도 다 나으면 슈퍼 면역자 😅 오늘은 네비게이션바에서 Back, 뒤로가기 부분에 대해 알아볼거에요! 위 상황은 A ViewController에서 버튼을 눌렀을때 다음 B ViewController로 이동하는 과정일거에요 그죠? 보여지는 사진은 B ViewController 일 거구요. 보통은 A ViewController 에서 아래 코드 입력후 진입을 하게되면 navigationController?.pushViewController(foodDetailVC, animated: true) < Back 이라는..
프로퍼티 옵저버 (Property Observers) 프로퍼티 옵저버는 프로퍼티의 값이 변경될 때 감지하고, 반응 합니다. 매번 값이 set(설정) 될때 불려지며, 새로운 값이 현재 값과 같더라도 불려집니다. 아래 위치에 프로퍼티 옵저버를 추가할 수 있습니다. 저장 프로퍼티를 정의할 때 저장 프로퍼티를 상속할 때 연산 프로퍼티를 상속할 때 서브클래스의 프로퍼티에 옵저버를 정의할 수 있습니다. 연산 프로퍼티는 setter의 값 변화를 감지할 수 있기 때문에 옵저버를 정의할 필요가 없습니다. 프로퍼티에서 아래 옵저버를 하나 또는 둘다 사용할 수 있습니다. willSet: 값이 저장되기 전에 호출됩니다. didSet: 새로운 값이 저장된 후에 바로 호출 됩니다. willSet willSet 에서, 새 프로퍼티..
Property Wrappers swift 5.1부터 추가된 기능 입니다. Property Wrapper는 프로퍼티가 저장되는 코드와 프로퍼티가 정의되는 코드를 분리하는 계층을 추가합니다. 정의 Property Wrapper를 정의 하기위해, wrappedValue 키워드의 프로퍼티가 정의되어 있는 구조체(struct), 열거형(enum), 클래스(class)를 만듭니다. 예제 아래는 구조체 TwelveOrLess에 감싸지는 값이 항상 12 이하라는걸 보장합니다. 만약 저장하는 값이 12보다 높을경우 12를 저장합니다. @propertyWrapper struct TwelveOrLess { private var number = 0 // number는 TwelveOrLess 내부에서만 사용될거기 때문에 pr..
이전에 프로퍼티에 대해 블로깅을 했었지만 복습겸 공식문서를 보고 한번더 정리해보려고 합니다. 프로퍼티 프로퍼티는 클래스, 구조체, 열거형과 관련한 값입니다. 추가로, 프로퍼티 옵저버를 정의하여 값의 변경사항을 모니터링할 수 있으며, 사용자 지정작업으로 응답할 수 있습니다. 프로퍼티 옵저버는 사용저가 정의한 저장프로퍼티와 하위 클래스가 상위클래스에서 상속받는 프로퍼티에 추가될 수 있습니다. (질문) 종류 저장 프로퍼티 (Stored Properties) - 값을 저장하고 있는 프로퍼티 ( 클래스, 구조체 ) 연산 프로퍼티 (Computed Properties) - 값을 저장하지 않고 계산 값을 반환해주는 프로퍼티 ( 클래스, 구조체, 열거형 ) 저장 프로퍼티 (Stored Properties) 값을 저장하..
앱에서 키보드를 띄운다음 키보드 외 화면을 누르면 키보드가 내려가는 기능을 알아 볼건데요. 너무 당연히 될 줄 알았던 기능이었지만, 이것도 따로 구현이 필요합니다. 그래도 생각보다 꽤 간단하니 바로 정리해 봅시다! +추가 (22.02.28) 같이 블로깅 스터디 하시는 분이 더 쉬운방법을 공유해 주셨어요 !! override func touchesBegan(_ touches: Set, with event: UIEvent?) { view.endEditing(true) } 위의 짧은 코드를 추가하면 끝!! 먼저 tap을 감지하는 메소드인 UITapGestureRecognizer(target:, action:) 를 사용해줍니다. override func viewDidLoad() { super.viewDidLoa..
- Total
- Today
- Yesterday
- Swift init
- Swift final
- Swift Error Handling
- iOS error
- swift protocol
- Swift RIBs
- Swift Leetcode
- 2023년 회고
- swift programmers
- swift property
- Swift 프로그래머스
- ios
- Swift joined
- Swift 내림차순
- Swift 프로퍼티
- swift (programmers)
- Swift inout
- Swift joined()
- Swift
- Swift ModernRIBs
- swift reduce
- swift 고차함수
- Swift 알고리즘
- 원티드 프리온보딩
- removeLast()
- RIBs tutorial
- Class
- RTCCameraVideoCapturer
- Combine: Asynchronous Programming with Swift
- CS 네트워크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |