본문 바로가기

Swift

(26)
[Swift] enum에서 사용되는 CaseIterable, RawRepresentable protocol 깊게 탐구하기!! 안녕하세요. 오늘은 enum에서 enum type의 모든 case를 Collect해서 배열로 반환할 수 있는 protocol인 CaseIterable을 소개하려고 합니다. 그리고 RawRepresentable도 소개하려고 합니다. Enum 타입으로 case에 rawValue, associated value 뿐 아니라 더 다양하게 활용할 수 있는 protocol이 제공되는 Swift가 정말 좋다고 느껴집니다: ) CaseIterable Protocol CaseIterable은 protocol입니다. Protocol 장점은 상속이 되지 않는 값 타입 자료형인 Enum에 여러 개의 protocol을 채택할 수 있습니다. allCases의 타입은 Self.AllCases입니다. 이는 Collection을 준수하..
[Swift] OOP. ObjectOrientedProgramming의 객체 설계 파해치기!!! | struct vs class | Class 설계 탐구하기 +_+ 안녕하세요! 오랜만에 OOP를 공부하면서 캡슐화, 상속, class vs struct, 다형성, Composition(조합)등의 잠시 잊고 있었던 개념을 머릿속으로 불러오게 되었습니다. 바이시클 카드, 포커 카드 등 다양한 카드의 parent가 될 수 있는 Card클래스를 구현해봤습니다.ObjectiOrientedProgramming간략하게 OOP(ObjectOrientedProgramming)를 소개하자면 객체라는 기본 단위를 모델링하고 이를 다양한 곳에서 원하는 목적에 맞게 상속받아서 사용하는 것입니다. 모델링이라는 개념은 현실 세계의 개념을 추상화해서 우리가 개발하는 xcode에서 swift 언어로 클래스와 프로퍼티가 있는 객체를 만드는 과정을 의미합니다. (관련 DB 개념 정리 링크) cf. 참고..
[Swift] private(set) var vs computed property | Read-Only 프로퍼티는 왜 사용할까? private(set) vs computed property(연산 프로퍼티). 우선 read-only에 대해서..Read-Only property란?외부에서 임의대로 값을 변경하지 못하게 클래스나 구조체 내부 변수를 보호할 수 있습니다. Concurrent한 환경에서 concurrecy problems이 발생되지 않음으로 안정합니다. 외부에서 클래스 내부의 read-only 변수의 값은 직접 접근해서 변경할 수 없지만 읽기는 가능하다는 뜻입니다.private(set) var vs computed propertyclass Card {  // MARK: - Properties  private let _number: Number  private let _shape: Shape  private var _appe..
[iOS/UIKit] UIStackView에 containerView를 추가했는데 containerView의 subview만 보여지는 경우 | AutoLayout 안녕하세요. 오늘은 스택뷰에 뷰들을 넣어서 side menu를 쉽게 구현하려고 개발을 하던 도중에 stackView안에 있는 4개의 container view는 사라지고 container의 subviews만 stackview에 추가됬던 이슈와 해결했던 경험을 글로 기록하려고 합니다. stackview에 추가될 제 컨테이너 뷰들은 Icon과Label을 가지고 있는 뷰 입니다. 그래서 이렇게 4개 선언했고 요기에 addArrangedSubviews로 넣어서 stackView를 구성했습니다. (subviews 레이아웃 지정 안해도 되니 정말 편하다고 느꼈습니다. 문제의 시작은 각각의 containerView(type: IconAndLabelView)에 tap gesture를 선언했을 때 이 stackview의..
[Swift] 프로토콜 선언시 발생할 수 있는 경고창 Class Delegate Protocol Violation 델리게이트 사용하기 위해 프로토콜을 선언하고 있었는데 Class Delegate Protocol Violation 경고가 나타났습니다. ( swiftLint 적용중입니다.) Delegate 로 설계된 protocol이 클래스 전용으로 선언되지 않았기 때문입니다.. Delegate는 일반적으로 사용하는 쪽에서 옵셔널 타입으로 선언합니다. 그 이유는 약한 참조로 선언해야 delegate가 메모리에서 해제될 때 더 이상 호출되지 않도록 할 수 있기 때문입니다. 서로가 강한 참조를 갖고 있다면 retain cycle이 발생될 수 있습니다. 이렇게 될 경우 한쪽에서만 해제가 된다해도 다른쪽에서 참조를 하고 있기 때문에 메모리에 계속해서 불필요한 인스턴스가 할당되어 있습니다. 이는 memory leak를 발생시킵니..
[Swift] 스위프트로 백준 편하게 시작하기 | 코딩테스트 준비 | readLine() | split(separator:) | map() 탐구 안녕하세요. 이번 글은 Swift로 백준 사이트에서 알고리즘 문제의 입력을 받는 방법에 대해서 소개하려고 합니다. 백준 사이트를 처음 접한 후 어느 문제를 봤을 때, 알고리즘으로 어떻게 풀 지 생각이 떠오르는 것 같은데 입력을 어떻게 받을지 정말 몰랐습니다.C나 C++은 입력받는 다양한 방법을 문법 공부 하자마자 배웠는데.. Swift는 앱 만들때 입력도 텍스트 필드로 받은 기억만 있었습니다. UIKit 컴포넌트 백준 제출 사이트에 추가할 수도 없고,,,, 다른 블로그의 글을 봤을 때, 엄청 낯선 함수들이 많았습니다. readLine()!.split(separator:"").map{...} // 이게 뭐지,, "UIKit으로 앱 만들 때 이런 함수들 한 번도 안 써봤는데" 하면서 뒷걸음질 쳤던 적도 있었..
[Swift] where keyword. 언제 사용할 수 있는지 탐구하기!! 안녕하세요. 언젠가 한 번 정리하려고 했던 where키워드를 복습할 겸 정리하려고 합니다. where 키워드를 사용하면 정말 편합니다. Protocol extension에선 특정 프로토콜을 사용하기 위한 준수 조건을 지정하거나, array's extension에서 특정 함수를 추가했을 때 해당 함수를 사용할 수 있는 Element를 한정적으로 제한할 때, 루프, 제너릭, switch case, do-catch, guard 등 다양한 경우에 where 키워드를 사용할 수 있습니다. 그리고 특정 조건에 부합하는 filter 된 값을 받을 수 있습니다. 쉽게 생각하면 if의 조건을 where의 절에 붙인다는 느낌입니다,, 즉, where 키워드를 통해서 조건을 추가합니다. 특정 타입으로 제한하거나, 특정 조건..
[Swift] String과 Character 자료형 개념 뿌수기(unicode scalar, grapheme cluster). Let's d 문자열 알고리즘을 공부하기 전에 한번 복습하면 좋을 것 같아서 String, Character 개념을 정리합니다! String structure String. 문자열 입니다. 정말 많이 사용합니다. Swift에서 제공되는 기본 자료형에 속합니다. Swift's Standard Library에 속합니다. 그래서 import Foundation 없이도 사용할 수 있습니다. String 자료형인 문자열은 Character들로 구성된 컬랙션입니다. 유니코드..? 유니코드란 전 세계 모든 문자를 '컴퓨터'에서 일관되게 표시하고 다룰 수 있도록 특정한 키(숫자 값)로 1대 1 매핑한 표준코드입니다. 영어 한 문자는 1byte입니다. 모든 언어가 1byte면 좋을 텐데 한글은 2byte로 표기합니다. 그렇기 때문에 ..