프로토콜은 특정 기능 수행에 필수적인 요수를 청의한 청사진(blueprint)입니다.(c++의 interface랑 비슷하다고 생각한다)필수 프로퍼티는 항상 var로 선언해야 한다=> var 키워드의 가변성과는 아무런 관계가 없음.타입 프로퍼티 참고 자료mutating
일종의 고차함수 인데, 내 생각엔 간단하게 간소화된 함수? 라고 생각한다.매개변수나 지역변수 혹은 외부 context를 참조하는 것=> 외부 context가 없어져도 사용할 수 있음 (Capturing by reference)이 경우에도 reference count가
특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형=> 비효율적=> 이런식으로 하나의 instance에 어느 클래스에서든 접근 가능하게 하는 것=> 이런식으로 위의 class의 init을 private으로 지정해주어야 외부에서 또 다른
가독성 높은 테스트, 이해하기 쉬운 아이콘, 최소화된 장식기능 주도의 디자인, 중요한 요소들의 강조전체 활용을 활용한 컨텐츠 표시메인 컨텐츠 이외의 다른 요소가 부각되지 않도록베젤, 그라데이션의 활용그림자 사용 최소화밝은 인터페이스 유지 레이어와 모션을 활용해 계층을
: 앱 내 위치를 알려주고 탐색 기능을 제공하며 작업을 시작하고 정보를 전달하기위한 버튼 포함: 정보를 전달하기위한 요소Views들은 사용자가 스크롤, 삽입, 삭제, 정렬 행위를 하는데 도움을 주는 것들Views 예시: text, graphics, animation,
메모리가 일정 값을 초과했을 때 큐마냥 선입 선출: 코드에서 메모리 접근이 시작되고 끝나기 전에 그 메모리에 대한 다른 접근이 시작될 수 없을 때를 의미: 장기 접근은 시작되고 종료되기 전에 다른 코드가 실행될 수 있음 → 오버랩 overlap함수는 모든 in-out
값을 저장하는 프로퍼티 정의기능 제공을 위한 메서드 정의서브 스크립트 구문을 사용하여 값에 접근을 제공하는 서브 스크립트 정의초기화 상태를 설정하기 위한 초기화 정의기본 구현을 넘어 기능적 확장을 위한 확장특정 종류의 표준 기능을 제공하는 프로토콜 준수상속을 사용하면
타입 캐스팅 (Type casting) 은 인스턴스의 타입을 확인하거나 해당 인스턴스를 자체 클래스 계층 구조의 다른 곳에서 다른 상위 클래스 또는 하위 클래스로 취급하는 방법입니다.Swift에서 타입 캐스팅은 is 와 as 연산자로 구현됩니다. 이 두 연산자는 값의
확장 (Extensions) 확장한 클래스, 구조체, 열거형, 또는 프로토콜 타입에 새로운 기능을 추가합니다. 이것은 기존 소스 코드에 접근 권한이 없는 타입을 확장하는 기능이 포함됩니다 계산된 인스턴스 프로퍼티와 계산된 타입 프로퍼티 추가인스턴스 메서드와 타입 메서드
클래스, 구조체, 열거형에서 시퀀스의 멤버 요소에 접근하기 위한 바로가기 첨자로, 단일 타입에 여러 서브스크립트를 정의할 수 있다=> 여기서 \[]이 서브 스크립트위를 참고했을 때 Int형을 index로 받고, 해당 index에 해당하는 element를 반환하는 것을
열거형 이름 뒤에 CaseIterable을 붙여 활성화 한다.초기화를 미리할 수 있음타입과 미리 할당된 값으로부터 유추한 원시값을 각각 가지고 있다.rawValue를 이용해서 초기화를 할 수 있는데, 없는 경우도 있으므로 원시값 초기화는 항상 옵셔널로 반환된다.케이스
처음 사용될 때까지 초기값은 계산되지 않는 프로퍼티 입니다. 지연 저장된 프로퍼티는 선언 전에 lazy 수정자를 붙여 나타냅니다.let은 인스턴스 초기화가 완료되기 전에 항상 값을 가지고 있어야 하기 때문에 lazy사용 불가능인스턴스의 초기화가 완료될 때까지 값을 알
개인 프로젝트 중에 지도를 사용해야할 일이 있어서 다양한 지도중에 어떤걸 선택해야할 지 고민을 했는데, 일단 apple의 기본 지도를 사용해서 진행을 해봤다처음엔 외부 라이브러리를 사용하기보다는 내장되어있는 것을 사용하는 게 의존성도 줄일 수 있을 것 같아서 apple
아래의 예제는 블랙잭 게임에서 사용되는 게임 카드를 모델링하는 BlackjackCard 라는 구조체를 정의합니다. BlackjackCard 구조체는 Suit 와 Rank 라는 2개의 중첩된 열거형을 포함합니다.블랙잭에서 에이스 카드의 값은 1 또는 11 입니다. 이러한
이는 Google map을 사용하기위해 Build setting의 Excluded Architectures에서 arm64를 넣었기 때문에 Firebase를 인식하지 못하는 문제였다.기본적으로 M1은 arm64를 기반으로 하는데, Intel과 M1 둘의 시뮬레이터를 위해
View Model과 View Controller 간의 데이터 변경에 대해 알려줄 수 있는 방법현재 이벤트 및 작업의 취소에 대해 지원하는 프로토콜cancel() 메서드를 호출함으로 리소스에 대해 해제=> 타이머, 네트워크 엑세스, 디스크I/O와 같은 사이드 이펙트 발
Google map, Firebase, kakaoAuth를 동시에 사용하려다 보니 시뮬레이터 지원 아키텍쳐에서 문제가 생겼다. Google map은 arm64를 excluded해서 사용하면 됐지만 kakao를 이용하는 과정에서 alamofire는 arm64를 이용해야했
배열 내부의 원소를 하나씩 탐색2차원 배열을 1차원 배열로 만들고 nil제거 및 옵셔널 바인딩nil제거 및 옵셔널 바인딩
항상 파이어베이스에서 document를 받아올 때는 공식 홈페이지에 적혀있는 방식을 따라서 그대로 데이터를 사용했던 것같은데 이번에는 보다 복잡한 데이터가 포함되어있어서 그런지 꽤나 헤맸다아래는 rooms에 속해있는 데이터들인데, 보시다시피 String : Any 이런
final 키워드의 기능과 동작, 이점에 대해서 설명해보시오. > 서브클래스에서 특정 method, property, subscript 가 오버라이드 되지 않도록 하기위해서 final 키워드를 사용. > - 오버라이드를 할 시 컴파일 에러를 발생시킴. > - 런타임
복잡성을 이해, 극복하기 쉬운 수준으로 단순화하는 것 (공통적인 것을 정의하는 것?)정의할 때 어떠한 타입으로 정의하느냐로 이어지는데 swift에서는classstructenumprotocol이 있다위의 것들 중에 내가 하는 추상화가 어떤 특성을 가졌는지 확인하고 선택을
파이어베이스를 이용해서 DB를 관리하고 있는데, 어떤식으로 구조를 작성해서 CRUD에 문제가 없게할 지 실제 고민 및 테스트를 많이 했다.결과적으로이런 식으로collection - document - collection - document… 이렇게 이어서 저장을 했다.
나는 특정한 버튼을 눌렀을 때 탭바를 이동시키는 작업을 하고 싶어서 찾아봤는데, 탭바는 각각의 인덱스로 매칭이 되고 있어서 강제로 index를 변경시켜주면 간단하게 이동이 가능했다.나중에 써먹을 때가 있을 것 같다.
key에는 fcm 서버 키를 넣으면 되고project_id에는 내 프로젝트의 id를 넣으면 된다.test1대신 방의 name을 넣었고,registration_ids에는 방안에 유저들의 각 기기 token값을 넣었다.=> 그리고 결과 값으로 notification_key