🩵 Delegate Pattern의 조건 델리게이트 패턴은 객체간의 상호 작용을 하기 위해서 사용됩니다. A객체가 B객체에게 이벤트나 데이터, 특정한 동작을 위임하는 등 말이죠. 이때, 프로토콜을 채택하는 객체가 클래스 타입이라면 참조에 의한 전달이 이루어지게 됩니다. 참조 타입은 메모리 상에서 한 객체를 여러 곳에서 공유할 수 있으므로, 여러 객체가 동일한 델리게이트를 참조하고 해당 델리게이트를 통해 통신할 수 있습니다. 반면 값 타입(구조체, 열거형 등)은 복사에 의한 전달이 이루어지기 때문에 여러 객체가 동일한 델리게이트를 참조하는 것이 어렵습니다. 값 타입의 특성 상 복사본이 만들어지기 때문입니다. 따라서 델리게이트로 사용되는 프로토콜을 정의할 때, 해당 프로토콜을 채택하는 객체는 반드시 참조 타..
UIStackView Setting let stackView = UIStackView() stackView.axis = .horizontal stackView.alignment = .trailing stackView.distribution = .fillEqually stackView.spacing = 15 stackView.heightAnchor.constraint(equalToConstant: 65).isActive = true axis 스택뷰의 정렬 방향을 결정한다 horizontal (수평) vertical (수직) alignment 스택뷰 내부 서브뷰를 어떻게 정렬할 지 결정한다 leading (스택뷰의 시작 부분) top (스택뷰의 상단) center (스택뷰의 가운데) trailing (스택뷰..
일단 테마는 구글에 xcode theme 라고 검색하면 깃허브에 올라온 테마가 엄청나게 많이 나온다. 대충 보고 한두개 고르자. 어차피 툴에 적용하면 또 맘에 안 들 가능성이 높기 때문에..(당사자성 발언) 난 이걸 적용해보았다 https://github.com/mozharovsky/WWDC17-Xcode-Theme GitHub - mozharovsky/WWDC17-Xcode-Theme: WWDC 2017 Xcode Color Theme from slides. WWDC 2017 Xcode Color Theme from slides. . Contribute to mozharovsky/WWDC17-Xcode-Theme development by creating an account on GitHub. gith..
(사족) 개발자는 늘 눈이 시리다. 당연하다. 하루 종일 모니터만 쳐다보고 앉았으니 눈이 시린 것이다. 다들 그런지는 모르겠는데 나는 툴에 영향을 많이 받는다. 테마도 그렇지만 폰트가 피로도에 한 몫 할 때가 많다. 그래서 난 개발툴을 설치하면 1번으로 다른거 다 제치고 폰트를 바꾼다... 내가 추천하는 폰트는 JetBrains Mono NL 폰트이다 깔끔 정갈 그 자체라서 좋아한다. https://www.jetbrains.com/lp/mono/ JetBrains Mono: A free and open source typeface for developers Try JetBrains Mono in your IDE. Its simple forms and attention to every detail make..
🌻 reloadData() table view가 변경되었다고 해서 cell 이 자동으로 추가되는 건 아니다 우리가 테이블 뷰를 업데이트 시켜주어야 하는데, 이럴 때 간단하게 사용할 수 있는 메소드가 reloadData()이다 func reloadData() https://developer.apple.com/documentation/uikit/uitableview/1614862-reloaddata reloadData() | Apple Developer Documentation Reloads the rows and sections of the table view. developer.apple.com 리로드 데이터는 셀, 섹션 헤더 및 바닥글, 인덱스 배열 등 테이블 구성에 사용된 모든 데이터를 다시 로드한다..
To do check button todolist를 만들던 도중, 투두 완료 여부를 체크하기 위한 부분이 필요했다. 기본적으로 내장된 CheckMark를 사용할 지 커스텀해서 만들지 고민했는데 커스텀하는게 더 이쁜것 같아서 하트로 만들어봤다. button tag delegate closure 이렇게 세가지 방법으로 구현할 수 있는데, 나는 간단히 모양을 보고 싶었던 것이기 때문에 tag를 사용해서 구현해보았다. 데이터 안정성을 고려하면 2번) delegate protocol을 만들어서 처리하는 게 맞는 것 같다. button.tag를 사용한 tableviewcell 안에 있는 button action cell.todoCompleteButton.tag = indexPath.row cell.todoCompl..
UITableView https://developer.apple.com/documentation/uikit/uitableview UITableView | Apple Developer Documentation A view that presents data using rows in a single column. developer.apple.com 단일 열의 세로행을 사용해서 데이터를 표시하는 뷰 각 행에는 1개의 콘텐츠가 포함된다 실제 콘텐츠를 표시하는 Cell을 제공한다 -> UITableViewCell reloadData() https://developer.apple.com/documentation/uikit/uitableview/1614862-reloaddata reloadData() | Apple D..
AutoLayout 다양한 디바이스, 화면 방향에 따라 유연하게 UI를 배치하고 조정한다 크기에 따른 반응형 조정이 없다면, 오른쪽같이 storyboard와 다른 화면에서 출력 될 때는 전부 깨져서 나올 수 있다 제약 조건 (Constraints) 뷰와 뷰 사이의 관계를 나타낸다 뷰의 위치와 크기를 결정하는 데 사용 뷰의 상대적인 위치를 설정 ㄴ Add New Alignment Constraints 각 값을 0으로 두면 가운데 정렬을 할 수 있다 이렇게 정렬하면 아이패드와 같은 화면에서도 가운데에 정렬이 된다 ㄴ Add New Constraints 오토레이아웃 엔진 (AutoLayout Engine) 제약 조건을 기반으로 뷰의 최종 위치와 크기를 계산 다양한 화면 크기와 방향에 대응할 수 있는 유연한 ..
프로토콜 Protocol 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등을 정의해둔 규약/약속 설계 조건만 제시하고 내부에서 기능을 구현하는 코드는 적지 않습니다! protocol 프로토콜이름 { // 프로토콜 정의 } // 상속받는 클래스의 프로토콜 채택 class 클래스이름: 슈퍼클래스, 프로토콜1, 프로토콜2 { // 클래스 정의 } 특징 상속과 비슷하지만 class 뿐만 아니라, struct와 enum에서도 사용할 수 있다 이름과 타입, gettable, settable을 명시한다 다중 상속이 가능하여 확장성이 좋다 타입으로 사용할 수 있다 associatedtype 프로토콜에서 실제 타입을 명시하지 않고 해당 프로토콜을 채택하는 타입에서 실제 타입을 결정하게 한다 typealias ..
내일배움캠프 앱개발 iOS 트랙 본캠프 3주차 Today I Learned 예외처리, 에러처리 프로그램에서 에러가 발생하는 상황에 대응하는 것 프로그램이 원하는대로 동작하지 않을 경우를 대비해야 하므로! 예외 처리를 통해서 예외적인 상황을 구별하고 사용자에게 어떤 에러가 발생했는지 알려주는 조치를 해야한다. Swift는 런타임에서 에러 발생한 경우 처리를 지원하는 클래스를 제공한다. Error 던져질 수 있는 오류 값을 나타내는 유형 Error 프로토콜을 사용해서 사용자 정의 에러를 만들 수 있다 enum KioskError: Error { case invalidSelection case inIsString(String) } throws , throw thorws 리턴값을 반환하기 전에 오류가 발생했을 ..
고차함수란? 다른 함수를 전달인자로 전달받거나, 함수 실행의 결과를 함수로 반환하는 함수 말이 너무 어렵다... 단순하게는? 매개변수로 함수를 가지는 함수 특히 컬렉션(배열, 딕셔너리, 집합) 정리하는 기능으로 많이 사용합니다 ㄴ 왜 쓰나요? 함수형 프로그래밍의 장점을 사용하기 위해서! 코드 간결 코드 재사용 쉬움 컴파일러 최적화 측면에서의 성능 차이 멀티스레드 환경에서 부작용 방지 Reduce(_:_:) 값을 조건에 맞게 걸러내는 함수입니다 매개변수로 전달되는 클로저의 리턴 타입은 Bool 형 이에요 func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> Set - 예시 1 let cast: Set = ["Vivien", "Marlon", "..
고차함수란? 다른 함수를 전달인자로 전달받거나, 함수 실행의 결과를 함수로 반환하는 함수 말이 너무 어렵다... 단순하게는? 매개변수로 함수를 가지는 함수 특히 컬렉션(배열, 딕셔너리, 집합) 정리하는 기능으로 많이 사용합니다 ㄴ 왜 쓰나요? 함수형 프로그래밍의 장점을 사용하기 위해서! 코드 간결 코드 재사용 쉬움 컴파일러 최적화 측면에서의 성능 차이 멀티스레드 환경에서 부작용 방지 Reduce(_:_:) 주어진 요소의 모든 내부 값을 더해서 반환하는 함수입니다 매개변수로 전달받은 클로저의 연산 결과를 반환한다고도 말해요 func reduce( _ initialResult: Result, _ nextPartialResult: (Result, Self.Element) throws -> Result ) r..