일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Input Output
- 양궁대회
- Value Type Reference Type
- Reference Cycle
- SWIFT
- 롤케이크 자르기
- 강한 참조 순환
- NavigationSearchBar
- TableView
- 면접을 위한 CS 전공 지식 노트 Tree
- 자료구조
- retain cycle
- CarouselCollectionview
- CoreData
- til
- UIKit
- TableView Section
- 면접을 위한 CS전공 지식 노트
- tableview section별 다른 cell적용
- ReferceCycle
- firebase
- UserDefaults
- 테이블뷰 나누기
- Array vs Linked List
- @escaping
- wil
- Carousel CollectionView
- class struct
- 프로그래머스
- coremotion
- Today
- Total
목록til (36)
개발하는 동글 :]

1. 클로저의 강한 참조 순환은 왜 발생할까? class HTMLElement { let name: String let text: String? lazy var asHTML: () -> String = { if let text = self.text { return "\(text)" } else { return "" } } init(name: String, text: String? = nil) { self.name = name self.text = text } deinit { print("\(name) is being deinitialized") } } 해당 클래스는 name과 text, lazy asHTML 속성을 가지고 있다. 그리고 asHTML속성을 살펴보면 text에 따라 값을 반환하는 함수이다. ..
TIL Result 타입의 내부 @frozen public enum Result { case success(Success) case failure(Failure) @inlinable public func map( _ transform: (Success) -> NewSuccess ) -> Result { switch self { case let .success(success): return .success(transform(success)) case let .failure(failure): return .failure(failure) } } @inlinable public func mapError( _ transform: (Failure) -> NewFailure ) -> Result { switch se..
1. Closure? Unnamed Closure와 Named Closure를 둘 다 포함 1.1 Named Closure, Unnamed Closure Named Closure : 평소와 같이 선언해 왔던 함수 func doSomething() { print("Somaker") } Unnamed Closure : 이름을 붙이지 않고 사용하는 함수 let closure = { print("Somaker") } 1.2 스위프트는 함수를 일급객체로 취급한다. 일급객체로 취급한다면? 함수를 변수에 할당할 수 있음 함수를 호출할 때 함수를 파라미터로 전달할 수 있음 함수에서 함수를 반환할 수 있음 2. Closure의 형태 {(Parameters) -> (Return Type) in 실행구문 return (Re..

Why? api사용을 연습해 보던 중 튜터님이 retain cycle이 생길 것 같다는 조언을 해주셔서 retain cycle이 뭔지 공부시작 TIL 1. Swift는 어떻게 메모리를 관리할까? Swift의 메모리는 대부분 ARC(automatic reference counting)가 관리해 준다. 기본적으로 클래스의 객체를 가리키는 각각의 reference(참조)는 강한 참조이다. 강한 참조가 있는 한 이 객체의 메모리는 해제되지 않을 것이다. 만일 객체에 대한 강한 참조가 존재하지 않는다면 이는 메모리에서 해제될 것이다. ARC - Swift의 메모리 사용량 추적 및 관리 시스템. - ARC는 더 이상 필요하지 않은 클래스 인스턴스를 자동으로 메모리에서 해제한다. import UIKit class T..
Why? api를 사용하여 데이터를 받아오는 과정 중 잘 이해가 되지 않는 문법을 발견함 TIL @escaping ? 클로저의 실행이 본래 함수를 벗어나서도 실행되도록 하는 키워드 Non-Escaping Closure func nonEscaping(closure: () -> () ){ closure() } 클로저가 실행되는 순서 클로저가 함수의 인자로 전달됨 함수 안에서 closure 가 실행됨 함수가 값을 반환하고 종료됨 메모리 함수내에서 단순하게 실행하고 종료하기 때문에 클로저를 힙영역이 아닌 일반 스택영역에 저장 Escaping Closure class ViewModel { var completionhandler: (() -> Void)? = nil func fetchData(completion:..

Why? memo app을 따라 만들어 보며 메모를 삭제하였을 때 하단의 메모 개수가 변경되지 않는 문제가 발생한 적이 있다 이러한 문제를 해결하는 과정으로는 해당 뷰의 viewWillAppear 메서드에 tableview와 collectionview, toolbar를 업데이트 및 다시 할당을 하니 문제를 해결 할 수 있었다. 그렇기에 viewWillAppear 메서드는 무엇이며 UIViewController에 어떠한 메서드와 프로퍼티가 있는지 확인해 봐야겠다는 생각이 들었다. override func viewWillAppear(_ animated: Bool) { // 화면이 새롭게 그려질 때마다 호출됨 myTableView.reloadData() myCollectionView.reloadData() s..

Why? 메모 앱의 기능중 갤러리로 보기를 구현하기 위해 CollectionView가 필요하여 구현하게 됨 TIL 문제 상황: 버튼을 누를시 리스트 형식의 뷰에서 갤러리 형식으로 바꿔서 보여줘야함 -> 데이터의 isTable 프로퍼티에 따라 tableview와 collectionview의 히든 값을 조정하여 구현 dataManager.isTable ? tableViewOn() : collectionViewOn() 동일한 위치에 tableview와 collectionview를 둠으로써 hidden값을 이용해 화면 구성이 가능해짐 CollectionView 코드 extension Page2ViewController: UICollectionViewDataSource, UICollectionViewDelega..

Why? memo앱을 종료한 후 재실행 하였을 때 데이터가 없어지는 문제가 있음 TIL UserDefaults 를 사용하기로 함 1. 저장할 데이터의 모델에 Codable 프로토콜을 채택한다. class FolderSection:Codable{ var folderDatas:[FolderData] } class FolderData:Codable{ var memoSections:[MemoSection] } class MemoSection:Codable{ var memoDatas:[MemoData] } class MemoData:Codable{ var content:String var date:String var info:String init(content: String, date: String, info: ..

Why? cell을 추가할 때 cell이 바로 나오지 않음 하단의 n개의 메모가 반영되지 않음 TIL 1. 메모가 추가되는 메서드에 아래의 코드를 추가하여 해결 myTableView.reloadData() 2. viewWillAppear에 tool 바를 다시 재정의?를 해줌 override func viewWillAppear(_ animated: Bool) { // 화면이 새롭게 그려질 때마다 호출됨 myTableView.reloadData() self.toolbarItems = makeToolbarItems() } 결과 모습

Why? 아이폰 설정앱을 따라 만들어 보던 중 위쪽 서치바가 특정 상황에 따라 보인다는 것을 발견하였다. 그렇기에 그것을 구현해 보려 SearchBar 가 포함된 cell을 만들어 보기도 하였고, 테이블 뷰 위에 그냥 SearchBar를 추가해보기도 하던 중 간단한 방법을 발견하였다. TIL 스크롤시 보이는 서치바 구현 1. UISearchController 프로퍼티를 만들어 준다. let searchController = UISearchController(searchResultsController: nil) 2. TableView의 내장 함수인 scrollViewDidScroll 메서드를 이용하여 스크롤 값이 변할 때 Navigation의 SearchController를 위에 선언한 프로퍼티로 변경해 ..
Enum(열거형)이란? 관련된 값으로 이루어진 그룹을 공통의 type(형)을 선언해 type-safety를 보장하는 방법으로 코드를 다룰 수 있게 해준다. C나 Objective-C가 Integer(정수형)값들로 열거형을 구성한 것에 반해 Swift에서는 case값이 string, character, integer, floting 값들을 사용할 수 있다. 열거형은 1급 타입(first-class types)*이어서 계산된 프로퍼티(computed properties)를 제공하거나 초기화를 지정하거나, 초기 선언을 확장해 사용할 수 있다. 열거형 문법 (Enumeration Syntax) 다음은 네 가지 방향을 갖는 CompassPoint 열거형 선언의 예시 case를 콤마로 구분해서 한줄에 적을 수 있다..
음수 계산이 되지 않았던 기존의 방식은 문자열을 배열로 만들 때 숫자인지 아닌지를 기준으로 분리를 했었다. 하지만 그렇게 할 시 음수가 배열에 저장되면 부호를 따로 빼서 저장을 하는 문제가 발생하였었기에 부호를 추가할 때 양 옆으로 공백의 문자열을 추가한 뒤 배열로 만들 때 공백을 기준으로 배열을 만들어보니 문제가 해결 되었다. // // ViewController.swift // fisrtCalcu // // Created by SeoJunYoung on 2023/07/17. // import UIKit class ViewController: UIViewController { var buttonTitle = ["7","8","9","+/-","4","5","6","*","1","2","3","/","0..
분리한 문자열을 압축하는 방식으로 더하기 - 빼기 - 나누기 - 곱하기 순으로 함수가 작동할 수 있도록 구현. 문제 상황 : 문자열을 ["+", "-", "*", "/"] 로 분리하여 음수의 부호를 분리해 버려 음수 계산이 안되는 문제. -> 로직을 문자열이 아닌 다른 방식으로 전달 받으면 해결 할 수 있을거 같음. // // DataManager.swift // CoupangClon // // Created by SeoJunYoung on 2023/02/10. // import UIKit class DataManager { var nowNum: String var numsAry:[Double] = [] var calToggle = true init(nowNum:String){ self.nowNum = ..
CollectionView를 사용하는 순서 UICollectionView 타입의 속성을 하나 생성한다. let slideView: UICollectionView = { let flowLayout = UICollectionViewFlowLayout() flowLayout.itemSize = CGSize(width: 50 , height: 50) flowLayout.sectionInset = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10) let collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) collectionView.translatesAutoresizingMas..
ArraySlice란 ? struct ArraySlice ArraySlice : Array, ContiguousArray 또는 ArraySlice 인스턴스의 slice ArraySlice타입의 특징 더 큰 배열의 section에서 작업을 빠르고 호율적으로 수행 할 수 있다. 슬라이스 요소를 새 저장소로 복사하는 대신, ArraySlice인스턴스는 더 큰 배열의 저장소에 대한 view를 제공 -> COW COW 란? (Copy On Write) 컴퓨터 프로그래밍에서 복사 동작을 할 때,실제 원본이나 복사본이 수정되기 전까지는 복사를 하지 않고 원본 리소스를 공유함 원본이나 복사본에서 수정이 일어날 경우, 그때 복사하는 작업을 함 또한 ArraySlice는 Array와 동일한 인터페이스를 제공하므로, 일반적..
.suffix() 를 사용하면 String.SubSequence라는 타입으로 반환이 된다. 여기서 SubSequence란? typealias SubSequence = Substring 라는 것을 공식문서에서 확인할 수 있다. 즉 SubSequence 는 Substring 타입의 별명이라고 할 수 있다. typealias some1 = Int typealias some2 = Int let num1 : some1 = 10 // num1 은 Int 의 별명 let num2 : some2 = 20 // num2 은 Int 의 별명 let sum : Int sum = num1 + num2 // 30 그리고 Substring은 자신의 원본 문자열을 저장하는 메모리를 그대로 사용한다. 즉, 원본 메모리의 인스턴스를 ..