일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- xcode
- navigationsplitview
- iOS 13.0+
- IOS
- iOS 개발자
- concurrency
- combine
- Git
- Navigation
- UI
- SWIFTUI
- 개발
- ios18
- TCA
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- composablearchitecture
- swiftdata
- test
- Alamofire
- Firebase
- 모바일
- network
- uikit
- SWIFT
- 정규표현식
- ObjC
- regex
- github
- xcodecloud
- Tuist
- Today
- Total
목록전체 글 (71)
iOS 개발 기록
Realm은 모바일 환경을 주요 타킷으로 하는 오픈소스 데이터베이스 관리 시스템이다. 모델 구조가 객체 컨테이너로 된 NoSQL 데이터베이스를 지향하며 조금 더 직관적인 사용이 가능하고 데이터 처리 속도가 향상된 장점이 있다. 찾아보니 SwiftUI와 Combine에도 적극적으로 지원하는데 정리된 자료가 많이 없는것 같아 개인적으로 공부하며 정리해본다. Realm 의 장점 1. Swift 뿐만 아니라 JAVA, Objective-C, JavaScript, React Native 등을 지원해 크로스 플랫폼으로 DB를 공유할 수 있다. 2. SQLite, FMDB, CoreDate 등 보다 빠르다. 3. Real-Time data base sync가 가능해 Realm Studio 으로 실시간으로 데이터를 확..
애니메이션은 그것이 발생하는 어떤 계기가 있기 전의 상태, 동작 중인 상태, 동작이 끝난 상태 3가지로 구분해서 생각할 수 있다. 즉, 시작과 끝 사이의 변화값이 있다는 것으로 중간값이 없는 Bool값으로는 애니메이션을 사용할 수 없다. animation 함수 struct Example: View { @State private var blur: Bool = false @State private var reduction: Bool = false var body: some View { Image("Life") .blur(radius: blur ? 10 : 0) .animation(nil)// 이전의 함수들에는 애니메이션을 적용하지 않고 .scaleEffect(reduction ? 0.2 : 1) .anima..
Reference : https://developer.apple.com/documentation/combine RX와 같은 비동기 이벤트를 처리하기 위한 프레임워크. iOS13부터 사용 가능하고, iOS13 이전 버전은 RX를 사용해야 한다. Publisher import Combine var IntArrayPublisher: Publishers.Sequence = [1,2,3].publisher RX의 Obsevable. 관찰 가능한 대상으로 데이터를 전달함. 전달할 때에 제네릭 형태로 으로 같이 보낸다. 에러 타입 중에 Never이 있는데, 얘는 어떠한 에러도 발생 안시킨다. Subscriber IntArrayPublisher.sink(receiveCompletion: { completion in s..
var body : some View { ... } [ 불투명 타입의 사용 이유 ] SwiftUI를 접하면서 이전에 못 본 some이라는 키워드가 눈에 띄었다. 여기서 some은 불투명 타입에 관련된 키워드로 프로퍼티나 함수 등의 반환 타입에 한정적으로 사용된다. 이때에 body가 가진 반환 타입은 반드시 some View여야 하는건 아닌데, some을 빼면 다음과 같은 오류가 발생한다. 첫번째는 프로토콜을 사용할 때에 타입을 유추할 수 없어서 발생하는 오류이고, 두번째는 타입 유추를 할 수 없기 때문에 뷰 프로토콜 조건이 만족되지 않아 발생하는 오류이다. 때문에 반환 타입을 정확하게 명시해주면 문제 없이 동작한다. 밑의 예에서 반환 값을 구조체 ProductRow라 명시하거나 Text로 명시하자 문제 ..
- 선언형 프로그래밍 : SwiftUI 는 기존의 명령형(Imperative) 대신 선언형(Declarative) 프로그래밍 방식이다. UI 구성을 단계적으로 만들어나가는 대신 최종적으로 어떤 모습이 되기를 원하는지 결과를 선언하는 형태를 뜻한다. 선언형 프로그래밍은 상태에 따라 바뀌게 되는 제어 흐름을 하나하나 관리해야 하며 이는 버그를 유발하기 쉽고 복잡성이 늘어나는 문제점이 있다. - 자동화 : 많은 기능이 자동으로 수행될 수 있도록 제공하는 것을 목표로함. - 조합 : SwiftUI의 API는 조합과 분리를 간단히 제공함. 예를 들어 큰 뷰를 하나의 기능을 가진 작은 뷰로 분리하거나 조합하는 것을 쉽게 만들 수 있음. - 일관성 : UI는 데이터와 항상 동기화되어 일관성 있게 보여야 한다는 것. ..
func solution(_ record:[String]) -> [String] { var nickname = [String : String]() var result = [String]() enum printScript: String { case Enter = "님이 들어왔습니다." case Leave = "님이 나갔습니다." } let recordAry = record.map{ $0 } // 닉네임 Dic 업데이트 recordAry.forEach{ let sen = $0.components(separatedBy: " ") if sen.count == 3 { nickname.updateValue(sen[2], forKey: sen[1]) } } // record 순서대로 메세지 출력 recordAry.f..
처음에 문제를 읽고 바로 파악하기 쉽지 않았고, 출력 예제를 보고나서야 어떤 문제인지 파악할 수 있었다. 주어지는 응답완료시간과 처리시간을 가지고 시작 시간을 구해야 한다. 주어지는 로그의 배열이 응답 완료 시간을 기준으로 정렬되어 있기 때문에 해당 로그의 시작 시간이 전의 로그의 끝나는 시간보다 빠르다면 작업 처리 요청이 무조건 겹친다고 볼 수 있다. 예를 들어 S4의 경우 S3보다 끝나는 시간이 늦지만 시작 시간이 (end + 1s) 이내이기 때문에 겹친다고 볼 수 있지만 S3는 시작 시간이 (end+1s) 보다 늦기 때문에 포함시킬 수 없다. import Foundation func solution(_ lines:[String]) -> Int { if lines.count == 1 { return ..
최단 경로 그래프 탐색 문제 처음에는 그래프 탐색 문제이길래 DFS로 풀어보려 했다. Code. 1 import Foundation let NM = readLine()?.components(separatedBy: " ").map{ Int(String($0))! } let n = NM![0] let m = NM![1] var maps = [[Int]]() var current = [0, 0] var result = m*m// 나올 수 있는 최대값 for i in 0..= 0 && next[1] = 0 else { continue } guard maps[next[1]][next[0]] == 1 else { continue } DFS(next, count+1, visited + [..
아이디어는 바로 떠올랐다. 앞에서부터 현재 수와 다음 수를 비교하여 작다면 현재 수를 제거하는 식으로 풀면 될 것 같았다. Code. 1 import Foundation func solution(_ number:String, _ k:Int) -> String { var numAry = number.map{ String($0) } let numCount = number.count - k var i = 0 while numAry.count != numCount { // 배열 끝까지 탐색하면 뒤에서부터 제거 if i >= numAry.count-1 { numAry.removeLast() } else if numAry[i] == "9" {// 해당 수가 9일 경우 다음으로 넘어감 i += 1 } else { i..
API 호출을 했는데 이런 에러가 떳다. finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." 검색해보니 IOS10부터는 ATS(App Transport Security)가 강화되어 보안이 안전하지 않은 Https 트래픽을 비활성화 시킨다고 한다. 이거는 Info.plist에서 ATS setting을 수정함으로 해결할 수 있다. 프로젝트 파일의 Info.plist에서 Information Property List 옆의 +버튼을 눌러 App Transport Security Settings 항..