전체 카테고리 223

[SwiftUI] 뷰 상태변경 @State @Binding @ObservedObject @StateObject

SwiftUI를 사용한다면 꼭 알아야할 Property Wrapper중 상태변화에 대한것을 알아보려고해요 @State UIKit에선 Property Observer를 통해서 변화가 일어나면 뷰를 업데이트시키는 방식을 사용했지만 SwiftUI에선 @State라는 프로퍼티 래퍼를 통해서 같은 일을 할 수 있어요 @State로 선언된 변수의 값이 변할 때 View를 다시 계산해서 그려줘요 주의사항으로는 View의 body에서만 @State변수에 접근해야해요 즉, private 선언이 따라오는것을 권장하고 외부에서 이 변수에 접근하면 안돼요 경고문, 텍스트필드, 편집모드같이 현재화면의상태를 잠깐 나타내거나 간단한 View의 상태를 나타낼 변수를 선언하는데 적합하죠 SwiftUI에서 View는 struct형태로 ..

[Data Structure] Priority Queue 우선순위 큐

우선순위 큐는 힙구조로 이뤄져있죠 힙구조란 완전이진트리이고 정렬기준에맞춰서 최댓값이나 최솟값을 빠르게 찾아낼 수 있어요 새로운 노드를 넣을땐 제일 끝에서 추가해서 자신의 부모의 인덱스인 (index-1)/2와 비교해서 거꾸로 올라오면서 조건에 맞는지 비교하며 교체가 일어나구요 (logn) 삭제할 때는 제일 위부터 아래로 가면서 다시 정렬하면서 교체하는 과정이 일어나요 (logn) struct PriorityQueue { var heap: [T] = [] let ordered: (T, T) -> Bool init(ordered: @escaping (T, T) -> Bool) { self.ordered = ordered } /// 큐 뒤에 요소 추가 mutating func enQueue(_ element:..

[Swift Algorithm] 42627 디스크 컨트롤러 (프로그래머스)

programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 주어진 요청에따라 응답하는데 걸리는 최소평균시간을 구하는 문제에요 문제를 보면 아래처럼 요청이 들어와요 이러한 요청을 처리하는 다양한 방법이있죠 왼쪽처럼 처리하면 3 + 7 + 17 = 27ms 오른쪽처럼 처리하면 3 + 11 + 16 = 30ms 왼쪽처럼 하는 방법이 최선의 선택이겟네요! 풀이방법 우선순위 큐를 사용해서 해결 할 수 있는 문제에요 우선순위 큐는 힙자료구..

[RxSwift] ReactorKit 체험 (Hello ReactorKit)

Rx를 사용하면서 MVVM을 쓰게되는데 Observable변수가 많아지게되면 상태를 나타내는 변수와 행동을 나타내는 변수의 구분이 잘 안가서 헷갈리고 의도를 파악하기 어려워서 쓰이는곳을 타고타고 찾아가서 직접 확인해야하는 경우가 생기죠 관리가 쉽지않다는것을 느꼈어요 이 문제점을 ReactorKit이 잡아주고 깔끔해진다고 해서 한번 써보려고 합니다! 간단하게 개념부터 읽고 가려해요 아키텍쳐의 모습이에요 View 뷰컨트롤러 셀도 View에 포함 View레이어에는 비지니스 로직이없고 입력을 action스트림에 바인딩하고 뷰의 state를 각 UI컴포넌트에 바인딩하는 역할 Reactor(ViewModel) 뷰의 상태를 관리하고 UI와는 독립된 계층 모든 뷰는 각각 1:1대응되는 reactor를 가지고 있음 뷰에..

[Swift Algorithm] 72413 합승 택시 요금 (2021 카카오 블라인드)

programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 시작지점으로부터 A, B까지 가는 택시요금의 최소합을 구하는 문제구요 A,B가 합승해서간다면 요금..

[Swift] 정규식으로 유효성 확인하기

정규식을 검색해보면 크게 NSRegularExpression타입과 NSPredicate타입이 있어요 둘의 차이는 NSPredicate - 메모리 내 필터링 이나 검색을 통한 패치 -> Collection안의 내용을 검색 혹은 필터하는 용도 NSRegularExpression - 유니코드 문자열에 적용되는 정규식의 표현 -> 정규식! 흔히말하는 정규표현식은 NSRegularExpression을 사용하구요! 타입이름도 좀더 정규표현식같죠? (같은 패턴으로 NSPredicate를 사용하면 맞는데 틀리다고 나오는경우가 있어요) 문법부터 보면 더 헷갈리기때문에 예제와함께 이해해볼게요 바로바로 확인할 수 있는 실습사이트는 www.regexpal.com Regex Tester - Javascript, PCRE, PH..

iyOmSd/Title: Swift 2021.03.20

[Swift Algorithm] 42747 H-Index (프로그래머스)

programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 풀이방법 문제는 짧지만 개념이 좀 어려운 문제에요 발표한 논문 n편중 h번이상 인용된 논문이 h편이상이고 나머지논문이 h번이하 인용되면 h의 최댓값이 답이다... 머라는거야... 헷갈리네요 ㅎㅎ [3, 0, 6, 1, 5] 배열이있다면 우선 보기좋게 정렬해볼게요 [6, 5, 3, 1 ,0] 이 될거고 index와 인용된 논문을 비교해줄거에요 h..

[SwiftUI] HStack, VStack, ZStack 기본 레이아웃

레이아웃을 잡을줄 알아야 디자인을 원하는데로 넣어 볼 수도 있을거에요 SwiftUI가 아직 발전중이기도하고 비슷한 컴포넌트들이 되게많아서 여러 방법으로 구현할 수 있다는점 알아두시구요! HStack, VStack, ZStack..? H, V, Z 가 앞에 붙어있는 스택이네요 Horizontal Vertical Z .. 음 어떤 풀네임인진 잘모르겠지만 Depth를 나타내죠! HStack의 생성자에요 하나씩 보면 파리미터1: 정렬 파라미터2: 간격 파라미터3: 무엇인가넣어주는 클로저네요? @ViewBuilder..?! -> 나중에 다뤄보도록할게요 우선 뷰를 넣어줄 수 있는 클로저라고 생각하면되요! 처음 프로젝트를 만들면 some View 반환형을 볼 수 있어요 Opaque Type이라고 불리구요 어떤 뷰를 ..

[Vapor] Schema CRUD 데이터베이스 테이블 수정

Vapor버전 4.0을 기준으로 작성된 게시글입니다! 데이터베이스를 사용하다보면 테이블에 새로운 컬럼을 추가할 때가 있거나 삭제할 때가 있어요 그럴때 수정을 데이터베이스에서 안하고 vapor에서 Fluent를 이용해서 코드로 할 수 있다고 하네요! Create 이미 존재하는 이름이 있는 경우 에러를 발생 시킬 우려가 있어요 ignoreExisting을 이용해서 이미있다면 무시할 수 있도록 해주세요 database.schema("planets") .id() .field("name", .string, .required) .create() planets테이블을 만들껀데 id name 의 컬럼을 만들어 주는 거고 이때 name은 String타입으로 무조건 값이 필요한 속성으로 만든거에요 Field를 만들때 re..

iyOmSd/Title: Vapor 2021.03.06

[Vapor] MySQL 연동 및 데이터 CRUD (Fluent)

Vapor버전 4.0을 기준으로 작성된 게시글입니다! DB기능을 Vapor에서 Fluent라고 지칭하는것 같아요 MySQL인 경우 // dependencies에 추가 .package(url: "https://github.com/vapor/fluent.git", from: "4.0.0"), .package(url: "https://github.com/vapor/fluent-mysql-driver.git", from: "4.0.0-beta") // target에 추가 .product(name: "Fluent", package: "fluent"), .product(name: "FluentMySQLDriver", package: "fluent-mysql-driver") 위의 코드를 추가해주면 아래와 같이 되겠죠..

iyOmSd/Title: Vapor 2021.03.06