일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 러닝기록앱
- 클로저의 캡슐화
- Protocol
- xcode로 날씨앱 만들기
- CoreLocation
- SwiftUI Boolean 값
- weatherKit
- Startign Assignments
- Timer
- font book
- swift
- weak var
- 러닝타이머
- MKMapViewDelegate
- 단일 책임원칙
- UICollectionViewFlowLayout
- Required Reason API
- dispatchsource
- RunningTimer
- App Store Connect
- addannotation
- CLLocationManagerDelegate
- Xcode
- 영문 개인정보처리방침
- AnyObject
- UIAlertAction
- MKMapItem
- WeatherManager
- 한국어 개인정보처리방침
- 서체관리자
- Today
- Total
목록Xcode Study (163)
VesselWheel
기존에 WeatherData를 활용한 현재 날씨 API는 위경도 혹은 도시지역의 현재 날씨 기준으로 실시간 기상예보이다. // MARK: - public Methods //현재 날씨정보 : LocationManager에서 위치정보를 받고, 위경도 API에 적용한 후, 날씨 데이터 값 복사 : 독립적인 인스턴스 생성 //https://api.openweathermap.org/data/2.5/weather?lat=37.565534&lon=126.977895&appid=3a33f61058f414d02d09e88bfa83117c public func getLocationWeather(latitude: Double, longitude: Double, completion: @escaping(Result) -> Vo..

결론부터 말하자면, 별도의 API를 불러와야 한다. https://vesselwheel.tistory.com/187 현재 문제점 https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key} 상기의 API call 주소의 구성요소를 변경하여 5일 단위 혹은 3시간 단위로 데이터를 배열에 넣어보고자 했다. 더보기 이 API 호출 URL은 OpenWeatherMap의 날씨 정보를 얻기 위한 것입니다. 각 구성 요소는 다음과 같습니다: 1. "https://api.openweathermap.org/data/2.5/weather": 이 부분은 OpenWeatherMap API의 기본 URL입니다. 이 URL을 통해 OpenW..
`WeatherManager`와 `LocationManager`를 싱글톤 패턴으로 사용할지, 델리게이트 패턴으로 사용할지는 애플리케이션의 요구 사항과 구조에 따라 달라집니다. 각 패턴의 특성을 이해하고 그에 따른 장단점을 고려하여 결정하시는 것이 좋습니다. **싱글톤 패턴**은 클래스의 인스턴스가 하나만 생성되고, 어디서든지 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴입니다. 장점: - 공유 리소스에 대한 동기화된 접근을 제공합니다. - 메모리 사용을 최적화할 수 있습니다. - 전역 상태 관리에 효과적입니다. 단점: - 전역 상태를 변경하면 애플리케이션 전체에 영향을 미치므로 사이드 이펙트를 일으킬 수 있습니다. - 테스팅이 어려울 수 있습니다. 더보기 Xcode에서 싱글톤 패턴이 나온 이유는 다음..

1. OpenWeatherMap에서 API 키 값을 받고나서, https://openweathermap.org/api Weather API - OpenWeatherMap openweathermap.org 2. 내가 필요로 하는 API를 선택 후 : 좌측 상단의 Current Weather Datas의 API doc에서 API call 주소를 획득한다. 트래픽 제한으로 유료결제를 해야하는 API도 있지만, 3시간 단위 5일치를 무료로 제공하는 Current Weather Data로도 충분하다. - API doc를 클릭하면 아래의 화면이 나오게 되는데, 획득한 API call를 활용하여 API를 호출할 수 있다. https://api.openweathermap.org/data/2.5/weather?lat={..

1. 아래의 코드를 내가 보고자 하는 View에 복사 붙여넣기 // MARK: - Preview struct PreView: PreviewProvider { static var previews: some View { ViewController().toPreview() } } #if DEBUG extension UIViewController { private struct Preview: UIViewControllerRepresentable { let viewController: UIViewController func makeUIViewController(context: Context) -> UIViewController { return viewController } func updateUIViewContr..
참고글: https://vesselwheel.tistory.com/178 정해진 지역의 날씨를 호출하여 날씨 정보 표시하기(feat. OpenWeatherMap API) MVC 패턴으로 만든 OpenWeatherMap API의 특정지역(서울)의 날씨정보 호출 및 출력 1. OpenWeatherMap에서 가져온 데이터로 구조체 만들기 // // WeatherModel.swift // Weather777 // // Created by Jason Yang on 2/5/24. // import vesselwheel.tistory.com 위치정보와 날씨정보의 데이터를 받아 UI에 표한하기에 앞서, 상기 첨부된 정해진 지역의 날씨를 호출하여 날씨정보를 표시해보았다. MVVM 디자인 패턴에서 1. 모델 : Weath..

MVC 패턴으로 만든 OpenWeatherMap API의 특정지역(서울)의 날씨정보 호출 및 출력 1. OpenWeatherMap에서 가져온 데이터로 구조체 만들기 // // WeatherModel.swift // Weather777 // // Created by Jason Yang on 2/5/24. // import Foundation // MARK: - WeatherData struct WeatherData: Codable { let coord: Coord let weather: [Weather] let base: String let main: Main let visibility: Int let wind: Wind let clouds: Clouds let dt: Int let sys: Sys let..
https://fomaios.tistory.com/entry/WWDC-2022-기존-UIKit-앱에-SwiftUI-적용하기-Use-SwiftUI-with-UIKit
https://vesselwheel.tistory.com/165 iOS 아키텍처 패턴 이해하기(MVC, MVVM) https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52 iOS Architecture Patterns Demystifying MVC, MVP, MVVM and VIPER medium.com MVC 패턴 이란? 더보기 https://developer.apple.com/library/archive/documentation/General/Concept vesselwheel.tistory.com MVVM 개념을 알아보았다면, 코드 단에서 어떻게 활용되는지 알아보자. 1. 타입을 지정하기 위한 구조체 생성 impor..
lazy 키워드를 사용하는 이유는? lazy 키워드를 사용하는 주요 이유는 성능 최적화와 초기화 시점의 제어입니다. 성능 최적화: lazy 키워드를 사용하면 해당 프로퍼티의 초기화를 미룰 수 있습니다. 이는 메모리를 효율적으로 사용하는 데 도움이 됩니다. 예를 들어, 무거운 계산이나 복잡한 구성이 필요한 객체의 경우, 실제로 필요한 시점에 초기화를 하면서 메모리 사용을 최적화할 수 있습니다. 초기화 시점 제어: 클래스의 다른 프로퍼티들이 모두 초기화된 후에 특정 프로퍼티를 초기화하고 싶을 때 lazy 키워드를 사용합니다. 이를 통해 다른 프로퍼티들의 최초 값들을 참조해서 초기화를 할 수 있습니다. 그래서 이 코드에서 lazy 키워드를 사용하면 collectionView가 실제로 필요한 시점에 초기화를 하..
https://yozm.wishket.com/magazine/detail/1702/ 개발자에게 물어봤습니다: ① 함께 일하고 싶은 개발자 | 요즘IT 이번 시리즈에서는 다양한 직무와 협업하는 IT 기업 직장인 중에서 개발자가 함께 일하고 싶어 하는 동료에 대해 다루고자 합니다. 오늘은 그중에서 개발자가 생각하는 ‘함께 일하고 싶은 개발 yozm.wishket.com 소통 포용 긍정 태도 도전정신 사람이 먼저다.

NavigationController 란? 더보기 Navigation Controller UINavigationController 기초 화면 간 탐색 제공: UINavigationController는 iOS 앱에서 화면 간의 탐색을 관리하며, 스택 구조로 화면을 쌓아 올립니다. Root View Controller: UINavigationController의 초기 화면으로 설정되는 뷰 컨트롤러를 Root View Controller라고 합니다. Push와 Pop: UINavigationController는 pushViewController(_:animated:) 메서드를 사용하여 새로운 화면을 스택에 추가하고, popViewController(animated:) 메서드를 사용하여 이전 화면으로 돌아갑니다..

TabBarController란? 더보기 UITabBarController 기초 탭 기반의 인터페이스: UITabBarController는 탭 바를 통해 여러 뷰 컨트롤러를 표시하고, 사용자는 탭을 선택하여 해당 뷰 컨트롤러로 이동할 수 있습니다. UIViewController 관리: 각 탭은 하나의 UIViewController와 관련되어 있으며, 탭이 선택되면 해당 뷰 컨트롤러가 화면에 표시됩니다. 탭 바 아이템: 각 뷰 컨트롤러는 탭 바에 아이콘 및 텍스트로 표시되는 탭 바 아이템을 가지고 있습니다. UITabBarController 고급 기능 Custom Tab Bar Item: 탭 바 아이템을 커스텀하여 아이콘, 텍스트, 색상 등을 사용자 정의할 수 있습니다. Delegate 활용: UITabB..

UIKit Code로 쓰는 UI 장점 유지보수 용이성: 코드로 UI를 작성하면 코드의 버전 관리 및 수정이 용이하며, 코드베이스를 유지 비용이 적습니다. Git과 같은 버전 관리 도구를 활용하여 협업 시 코드 변경을 효과적으로 관리할 수 있습니다. 동적인 UI 작성: 코드로 UI를 구성하면 런타임에 동적으로 UI를 변경하거나 조작하기 용이하며, 복잡한 UI 로직을 더 쉽게 구현할 수 있습니다. (버튼에 따른 UI 이동 등을 구현하기 용이합니다.) 분업 용이성: 개발자가 각자의 역할(디자인 구현, 비즈니스 로직 구현 등)에 집중할 수 있으며, 작업 분담이 용이합니다. 단점 시각화 어려움: UI의 구성 요소를 코드로 작성하면 디자인을 미리 시각적으로 확인하기 어렵습니다. 디자이너가 실시간으로 디자인을 확인하..

https://developer.apple.com/documentation/avkit AVKit | Apple Developer Documentation Create user interfaces for media playback, complete with transport controls, chapter navigation, picture-in-picture support, and display of subtitles and closed captions. developer.apple.com AudioVisual(AV)이란? 슬라이드 테이프 프레젠테이션, 영화, 텔레비전 프로그램, 회사 회의, 교회 예배 등 소리와 시각적 요소를 모두 처리하는 전자 매체를 의미 더보기 AVFoundation AudioVis..

https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52 iOS Architecture Patterns Demystifying MVC, MVP, MVVM and VIPER medium.com MVC 패턴 이란? 더보기 https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html 예시 코드 import UIKit struct Person { // Model let firstName: String let lastName: String } class GreetingViewController : UIVi..
Left Constraint는 어떤 객체의 왼쪽을 뜻하고, Leading Constraint는 어떤 객체의 앞쪽 가장자리를 뜻한다. Left Constrint와 Right Constraint는 절대적이며 항상 화면 또는 컨트롤의 왼쪽 / 오른쪽을 참조한다. Leading Constraint와 Trailing Constraint는 device locale의 영향을 받는다. (장치별 국가 설정) - 읽기 방향이 오른쪽에서 왼쪽인 locale(예: 히브리어, 아랍어)에서는 leading이 오른쪽이 되고 trailing이 왼쪽이 된다. left constraint와 leading constraint는 Auto Layout에서 UI 요소의 위치를 정의할 때 사용하는 개념입니다. 두 가지 방식은 유사해 보일 수 있..

UISheetPresentationController을 이용해서 하프모달을 구현해보자. 공식문서 https://developer.apple.com/documentation/uikit/uisheetpresentationcontroller UISheetPresentationController | Apple Developer Documentation A presentation controller that manages the appearance and behavior of a sheet. developer.apple.com 맵뷰에서 킥보드 등록을 위해 [대여하기]버튼을 탭하면 킥보드의 대여상태를 UI로 구현하기 위해 여러가지 방법이 있다. 그 중에서 [대여하기] 버튼을 탭하면 Register로 뷰를 전환할 때..
Sets the property of the receiver specified by a given key to a given value. 인스턴스 매소드로 부여된 key와 key를 쌍으로 저장한다. key값은 String으로 받는다. setValue(_:forKey:) func setValue( _ value: Any?, forKey key: String ) 공식문서 https://developer.apple.com/documentation/objectivec/nsobject/1415969-setvalue Todo 앱을 만들면서, Userdefaults를 이용한 데이터를 저장할 때 사용되는 setValue 매소드 // // TodoStore.swift // TodoList // // Created by ..

들어가기 앞서, xcode를 활용하여 UIKit에서 코드베이스로 협업을 진행하게 되면 명확하게 명문으로 보이는 코드를 통해 MVC (Model - View - Controller) 패턴가 연결이 되기 때문에 충돌이 발생하기 전에 코드에서 에러코드를 확인할 수 있다는 장점이 있다. 하지만, storyboard를 활용하게 되면 내가 만들고 있는 UI 객체들의 생김새와 기능을 GUI로 직접 보면서 작업할 수 있다는 것이 장점이다. MVC 패턴이란? 더보기 MVC 패턴이란? Model 애플리케이션의 데이터와 비즈니스 로직(화면과 전혀 관련이 없는 로직과 데이터 관련) ex) DB, 서버에서 가져온 컨텐츠, DTO와 같은 사용자 정의 클래스 또는 구조체 View View는 사용자 인터페이스를 표현하고 사용자에게 ..
공식문서 https://developer.apple.com/documentation/foundation/userdefaults UserDefaults란? UserDefaults는 간단한 Key-Value 데이터를 저장하는데 사용됩니다. 주로 설정 값이나 사용자 기본 설정과 같은 작은 데이터를 저장할 때 사용됩니다. 여기서 key값은 꼭 String 타입이여야 합니다. // 데이터 추가 및 업데이트 UserDefaults.standard.set(value, forKey: key) // 데이터 조회 | Any? 타입이여서 as를 사용한 타입 변환 후 사용 UserDefaults.standard.value(forKey: key) // 데이터 조회 | 특정 타입으로 반환할 경우 (String) UserDefau..
Decodabe, Encodable, Codable 이해하기 Decodable 프로토콜 Decodable 프로토콜은 데이터를 객체로 디코딩할 때 사용됩니다. 즉, 외부 데이터(JSON)를 Swift의 데이터 모델로 변환하는데에 필요한 프로토콜입니다. **Decodable**을 준수하는 객체는 외부 데이터를 해석하고 그 데이터를 객체의 프로퍼티로 매핑할 수 있어야 합니다. 이곳에서 CodingKeys 는 디코딩 할 때, 프로퍼티들에 대한 매핑을 제공하는 역할을 합니다. 아래 예시에서는, id라는 프로퍼티의 디코딩 키를 key로, name 프로퍼티의 디코딩 키를 프로퍼티 이름과 동일하게 지정한 예시입니다. struct User: Decodable { let id: Int let name: String // ..

아직은 생소하지만 개발자로서 앱을 개발하려면 데이터를 스왑하기 위해? 네트워크 통신을 통해 다양한 API에서 데이터를 가져와야한다. 따라서 swift에서 다루는 URL, REST API, Decodable/Encodable/Codable에 대한 개념을 이해하고 데이터 모델링을 숙달하고자 한다. URLSession을 통해 REST API와 통신할 수 있다. URL 구성요소란? 더보기 각 구성요소들은 API 엔드포인트와 함께 특정 자원에 대한 요청을 식별하고 전달하는 데 사용됩니다. ### **프로토콜 (Protocol)** URL은 일반적으로 **`http://`** 또는 **`https://`**와 같은 프로토콜로 시작합니다. 이는 클라이언트와 서버 간의 통신 방법을 지정합니다. **`http://`**..

UIKit Code로 쓰는 UI 장점 유지보수 용이성: 코드로 UI를 작성하면 코드의 버전 관리 및 수정이 용이하며, 코드베이스를 유지 비용이 적습니다. Git과 같은 버전 관리 도구를 활용하여 협업 시 코드 변경을 효과적으로 관리할 수 있습니다. 동적인 UI 작성: 코드로 UI를 구성하면 런타임에 동적으로 UI를 변경하거나 조작하기 용이하며, 복잡한 UI 로직을 더 쉽게 구현할 수 있습니다. (버튼에 따른 UI 이동 등을 구현하기 용이합니다.) 분업 용이성: 개발자가 각자의 역할(디자인 구현, 비즈니스 로직 구현 등)에 집중할 수 있으며, 작업 분담이 용이합니다. 단점 시각화 어려움: UI의 구성 요소를 코드로 작성하면 디자인을 미리 시각적으로 확인하기 어렵습니다. 디자이너가 실시간으로 디자인을 확인하..
들어가기 앞서, 타이머 기능을 위해서는 클로저의 탈출 클로저(Esacaping closure)의 비동기 실행에 대한 이해가 필요하다. 탈출 클로저(Esacaping closure) 란? 더보기 코드의 순차적 실행과 비동기의 실행 순서 // 순차적 실행 func sequentialExecutionExample() { print("Start") // 1. 첫 번째 작업 for i in 1...3 { print("Task \(i)") } // 2. 두 번째 작업 print("Next Task") // 3. 세 번째 작업 let result = 5 + 3 print("Result: \(result)") print("End") } sequentialExecutionExample() /* 위의 코드는 함수 sequ..

사용 목적 아이폰에서 일반적으로 프로퍼티를 선택했을 때 선택을 안내하거나 경고창을 알릴 때 사용하는 매서드 present(_:animated:completion:) 이 클래스를 사용하여 표시하려는 메시지와 선택할 작업이 포함된 경고 및 작업 시트를 구성합니다. 원하는 작업과 스타일로 경고 컨트롤러를 구성한 후 메서드를 사용하여 표시합니다 . UIKit은 앱 콘텐츠에 대해 모달 방식으로 경고와 작업 시트를 표시합니다. addAction(_:) 사용자에게 메시지를 표시하는 것 외에도 작업을 경고 컨트롤러와 연결하여 사람들에게 응답 방법을 제공할 수 있습니다. 메서드를 사용하여 추가하는 각 작업에 대해 경고 컨트롤러는 작업 세부 정보가 포함된 버튼을 구성합니다. 사람이 해당 작업을 탭하면 경고 컨트롤러는 작업..

정수 값에 세자리수 마다 콤마를 넣는 방법으로 .numberStyle을 .decimal로 저장한다. let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .decimal let result = numberFormatter.string(from: NSNumber(value: 1000000)) print(result! + "원") Double 타입에 대한 확장(extension)으로, "formattedString()"이라는 메소드 extension Double { func formattedString() -> String { let numberFormatter = NumberFormatter() numberFormatter.number..

통일성을 갖는 셀의 관리를 위해 UICollectionView를 사용한다. 그중에서, Flowlayout은 컬레션뷰에 종속된 셀의 간격, 여백 등을 조정할 수 있는 프로토콜이다. UI Peroperties를 선언 // MARK: - UI Properties private lazy var collectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionV..

MenuView와 OrderListView 간의 데이터 연결을 위해서 MenuDataDelegate를 약한 참조로 연결하였다. weak var delegate: MenuDataDelegate?는 약한 참조를 사용하여 MenuDataDelegate 프로토콜에서 구현한 객체를 참조하는 변수를 선언하는 코드로 이를 통해 객체 간의 통신을 위임하고, 메모리의 누수를 일으키지 않고 안전하게 처리할 수 있게 된다. 약한참조란?(ps. 미소유참조) 더보기 Weak Reference (약한 참조) 약한 참조는 Strong Reference(강한 참조)와는 달리 객체의 참조 count 증가시키지 않습니다. 객체의 생명 주기에 영향을 주지 않으면서 참조를 유지할 수 있습니다. class Person { var name: ..

들어가기 앞서, 평소 사용하던 키오스크 앱이나, 카페, 페스트 푸드 어플리케이션을 보면 내가 원하는 메뉴를 선택하기 위해 메뉴 그림, 가격을 나열해 둔 것을 볼 수 있다. 스타벅스 같은 경우, 위에서 아래로 메뉴가 나열되어 있어, 데이블뷰로 구현되어 있다. 하지만, 블로그에서 다루지는 않겠지만 다른 메뉴를 선택하고 주문하는 앱들을 보면 MD 상품이나 회원가입이 우선되어 원하는 메뉴를 찾기 위해서 여러번 클릭해야하는 경험을 해왔다. 이점에서 불편함을 경험하였고, 부분적이지만 collectionView로 해당 상품들을 직관적으로 볼 수 있도록 구현해 보았다. MenuView 클래스에 구현된 CollectionView 더보기 // // MenuView.swift // SPABUCKS-Kiosk-iOS // /..