본문 바로가기

전체 글

(21)
[SwiftUI / MVI 패턴] MVI 패턴의 변화 ( iOS 17+ ) - 2탄 2025.06.07 - [SwiftUI] - [SwiftUI / MVI 패턴] MVI 패턴의 변화 ( iOS 17+ ) [SwiftUI / MVI 패턴] MVI 패턴의 변화 ( iOS 17+ )MVI 패턴에 익숙하지 않지만 그래도 공부의 목적으로 MVI 패턴에 대해서 공부했던걸 끄적여봄.우선 MVI 패턴에 대해서는 단방향 아키텍쳐가 핵심이다. 자세한건 다른 블로그 글들 많으니 참고 바slowsure.tistory.com이 글에 이어서 적겠음. 위의 이전 글을 읽고 오는걸 추천그러니깐 @Observable과 ObservableObject는 어떻게 차이가 나길래? MVI 에서 Containter를 걷어낼 수 있었을까?@Observable과 ObservableObject 모두 코드를 볼 수 있음 바로 알겠지만..
[SwiftUI / MVI 패턴] MVI 패턴의 변화 ( iOS 17+ ) MVI 패턴에 익숙하지 않지만 그래도 공부의 목적으로 MVI 패턴에 대해서 공부했던걸 끄적여봄.우선 MVI 패턴에 대해서는 단방향 아키텍쳐가 핵심이다. 자세한건 다른 블로그 글들 많으니 참고 바람.내가 다루고자하는건 MVI 패턴과 ObservableObject와 @Observable이다.우선 나는 @Observable 매크로를 이용해서 MVI 패턴을 다음과 같이 추상화함.View 이름을 MyView라고 할 때MyViewIntentProtocol : View -> Intent로 전달할 줄 함수 정의 프로토콜MyViewStateDataProtocol: View가 의존하는 데이터들을 정의한 프로토콜MyViewStateProtocol: Intent -> State로 전달하는 함수 정의 프로토콜Intent는 Vi..
[SwiftUI] ScrollView Paging 하기 App Store에서 미리보기 저 스크롤은 페이지 스크린샷 만큼씩만 페이지가 넘어간다.TabView로 구성하면 될까 싶었지만TabView는 한 페이지에 1개씩 밖에 안된다. 저렇게 반쯤 걸쳐져 있는 것은 구현이 안된다.ScrollView(.horizontal) { HStack { ForEach(0..방법은 .scrollTargetBehavior(.viewAligned) .scrollTargetLayout() 이다해당 방법을 통해서 원하는 크기 만큼씩 Scroll을 조절할 수 있다.
[SwiftUI] GeometryReader로 반응형 화면 만들기 여기서 [미리 보기] 의 스크린 샷 처럼 스크린 샷 하나가 전체 화면의 일부분만 차지하게 만들고 싶었다.-> GeometryReader를 overlay해서 해결import SwiftUIstruct AppScreenShotView: View { @State var imageWidth: CGFloat = 300 let horizontalPadding: CGFloat = 21 var body: some View { VStack(spacing: 12) { HStack { Text("미리 보기") .font(19, .bold) Spacer() } ..
[SwiftUI] SearchBar in Navigation AppStore 클론 코딩을 하면서 저 NavigationTitle 속에 있는 SearchBar를 구현하고 싶었다.검색해도 잘 안 나와서 찾은 걸 정리한다.NavigationStack { ScrollView { // Some View } .navigationTitle("검색") .toolbarTitleDisplayMode(.inlineLarge) .searchable(text: $textTerm,isPresented: $presentSearchable ,placement: .navigationBarDrawer(displayMode: .always), prompt: "게임, 앱, 스토리 등..") .onSubmit(of: .search) { print("S..
[프로그래머스 / Swift] 표현 가능한 이진트리 https://school.programmers.co.kr/learn/courses/30/lessons/150367?language=swift 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 접근 문제 자체가 조금 어렵다. 글 읽기 싫어하는 개발자라면 더욱더 문제 설명을 짧게하면 이진수로 변환된 것 앞에 0 을 붙여서 포화이진트리 개수를 채우고 이게 가능한 포화이진트리인지 체크할 것이다 문제를 보고 재귀로 풀어야겠다는 생각이 들었다. 그럼 문제는 재귀의 탈출 조건과 재귀함수의 재실행 조건을 따져야 했었다. 2. 문제 풀이 2-1. 처음 풀었던 문..
[프로그래머스 / Swift] 택배 배달과 수거하기 https://school.programmers.co.kr/learn/courses/30/lessons/150369 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 문제 접근 문제를 보고 그리디로 접근해야겠다. 라는 느낌은 왔다. 하지만 어떻게 그리디를 구현하냐가 문제였다. 가장 먼 곳부터 해결해야 하는 것은 알겠는데 출발 할 때에 물류창고에서 택배차 설정을 어떻게 해야하지? 너무 많이 가져가면 가장 먼 곳의 빈 택배박스를 회수 못할 경우가 생긴다. -> 한 번 더 왕복해야 한다. 너무 적게 가져가면 택배를 건네주기 위해서 다시 왕복해야 한다. 이게 ..
[BOJ 12015/파이썬]가장 긴 증가하는 부분 수열2 0. 문제 링크 https://www.acmicpc.net/problem/12015 1. 문제 2. 문제해결 알고리즘 이분탐색 바이토닉 정렬 3. 문제 해결 및 코드 이 문제의 핵심은 부분 수열이 아니라 부분 수열의 개수이다. import sys from bisect import bisect_left input = sys.stdin.readline def main(): N = int(input()) arr = list(map(int, input().split())) stack = [0] for n in arr: if stack[-1] < n: stack.append(n) else: stack[bisect_left(stack, n)] = n print(len(stack) - 1) main() 수열에 가장 ..