일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CLLocationManagerDelegate
- UIAlertAction
- 서체관리자
- Required Reason API
- 러닝타이머
- WeatherManager
- 클로저의 캡슐화
- Startign Assignments
- RunningTimer
- AnyObject
- 단일 책임원칙
- CoreLocation
- weak var
- MKMapItem
- weatherKit
- 러닝기록앱
- MKMapViewDelegate
- swift
- xcode로 날씨앱 만들기
- App Store Connect
- SwiftUI Boolean 값
- addannotation
- Protocol
- 영문 개인정보처리방침
- font book
- dispatchsource
- UICollectionViewFlowLayout
- 한국어 개인정보처리방침
- Xcode
- Timer
- Today
- Total
목록Whale life (215)
VesselWheel
결론부터 말하자면, dispatchsource 클래스를 활용하여 러닝기록 타이머를 구현한다. 이 글의 마지막으로 내려가서 (3/3) 의 글을 보시고, 이해를 위해서 현재 보고 있는 글을 참고하시라. 공식문서를 읽기 전에 참고 블로그로 대략적인 흐름에 대해 이해하려했다. https://please-amend.tistory.com/entry/Swift-Timer%ED%83%80%EC%9D%B4%EB%A8%B8%EC%99%80-Thread%EC%8A%A4%EB%A0%88%EB%93%9C-RunLoop%EB%9F%B0%EB%A3%A8%ED%94%84 [iOS] Timer(타이머)와 Thread(스레드), RunLoop(런루프) ** 아직 공부하는 중이라 틀린 내용이 있을 수도 있습니다. ** 최근 프로젝트에서 ..
문제 풀이 - 최초풀이 import Foundation func solution(_ sizes:[[Int]]) -> Int { var maxsize = 0 var minsize = 0 for i in sizes { maxsize = max(maxsize, i.max()!) minsize = min(minsize, i.min()!) } return maxsize * minsize } -> 상기의 코드로 풀 경우, i.max()와 i.min()에서는 배열 i의 최대값과 최소값을 반환하는데, 이 값들은 Optional이므로 강제 언래핑(!)을 사용하고 있다. 이는 i가 비어있을 경우 런타임 오류를 발생시킬 수 있다. 따라서, import Foundation func solution(_ sizes:[[Int]]..
https://developer.apple.com/documentation/uikit/uipageviewcontroller UIPageViewController | Apple Developer Documentation A container view controller that manages navigation between pages of content, where a child view controller manages each page. developer.apple.com
문제 풀이 import Foundation func solution(_ t:String, _ p:String) -> Int { let length = p.count // p는 1 ≤ p의 길이 ≤ 18 를 갖음 var count = 0 // 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수 for i in 0..
들어가기 앞서, 앱에서 지도를 구현할 때 다양한 지도 서비스가 있다. 지도 API를 비교한 블로그글을 참고하면 성능부터 비용까지 자신의 앱에 알맞는 서비스를 선택할 수 있다. [지도 API 비교 블로그] 더보기 https://epdev.tistory.com/8 지도 API 비교(구글, 네이버, 카카오) 이전에 안드로이드 앱을 만들 때, 보통 사용하는 지도 API 세 개(구글, 네이버, 카카오)를 비교했던 결과를 올린다. 비교일은 2020년 2월 중순으로 현재 기준과 다소 차이가 날 수 있다는 점은 참고 epdev.tistory.com 비용성 측면에서 다양한 기능을 제공하는 상업성 지도(구글, 네이버, 카카오)는 궁극적으로 비용이 발생 하지만 Mapkit은 비용이 발생하지 않고, 퍼스트파티로 UIkit과의..
https://nbcamp.spartacodingclub.kr/blog/내일배움캠프-우수-til-앱-과정-2기-2월-2-3주차--16353 내일배움캠프 우수 TIL | 앱 과정 2기 2월 2, 3주차 - 내일배움캠프 블로그 TIL 작성 방법이 궁금한가요? 내일배움캠프 수강생들의 우수 TIL을 참고해 보세요. | 📕수강생 학습일지 nbcamp.spartacodingclub.kr
문제 풀이 import Foundation func solution(_ number:[Int]) -> Int { var count = 0 let n = number.count for i in 0.. Int? { guard let firstNum = array.first else { return nil } var maxNum = firstNum for num in array { if num > maxNum { maxNum = num } } return maxNum } let input = [3, 5, 6, 1, 2, 4] let result = findMaxNum(input) print("정답 = 6 / 현재 풀이 값 = ", findMaxNum([3, 5, 6, 1, 입력 array의 원소 갯수 = N ..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12930 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 func solution(_ s:String) -> String { var arr: [String] = [] var x = 0 for i in s { if x % 2 == 0 { arr.append(String(i.uppercased())) } else { arr.append(String(i.lowercased())) } x += 1 if i == " " { x = 0 } } retur..
https://forums.developer.apple.com/forums/thread/700882 Is DTO pattern in iOS really benef… | Apple Developer Forums It depends on your app. If you have a complex app with different layers like services and repositories or DAOS implementing this pattern could be positive for you. You can hide your business logic and improve your memory usage not using data you don't need forums.developer.apple.c..
https://vesselwheel.tistory.com/187 5일치 3시간 단위 날씨예보 배열에 넣기(with OpenWeatherMap) (1/2) https://vesselwheel.tistory.com/185 3시간 단위 5일치 OpenWeatherMap API를 활용한 데이터 호출 기존에 WeatherData를 활용한 현재 날씨 API는 위경도 혹은 도시지역의 현재 날씨 기준으로 실시간 기상예보이다. // vesselwheel.tistory.com 이전 글을 참고하여, API call을 통해 가져온 데이터를 UI에서 사용하기 위해 배열에 넣는 데이터 가공을 하였다. 하지만, 날씨데이터를 가져오는 매소드 안에, 데이터를 배열에 넣는 데이터가공작업을 함께하니 코드가 길어지고 가독성이 떨어지는 문제..
https://vesselwheel.tistory.com/185 3시간 단위 5일치 OpenWeatherMap API를 활용한 데이터 호출 기존에 WeatherData를 활용한 현재 날씨 API는 위경도 혹은 도시지역의 현재 날씨 기준으로 실시간 기상예보이다. // MARK: - public Methods //현재 날씨정보 : LocationManager에서 위치정보를 받고, 위경도 API vesselwheel.tistory.com 상기 주소의 이전글을 참고하여 //위치데이터 1. LocationMager 클래스에서 싱글톤으로 현재위치 혹은 지정위치를 호출하여 위경도를 받으면, // API call 2. WeatherManager의 getForestWeather 매소드가 파라미터로 받은 위경도 기준 지역..
기존에 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가 실제로 필요한 시점에 초기화를 하..
3진법 뒤집기 코딩테스트 문제를 풀기 전에 3진법을 활용하는 이유가 궁금해졌다. 왜 3진법이 나왔을까? 수학적 모델에 있어서 3진법은 활용될 수 있다. 더보기 전자기기의 세그먼트 디스플레이: 일부 전자기기에서는 7세그먼트 디스플레이를 사용하여 숫자를 표시합니다. 7세그먼트 디스플레이는 각 숫자를 표현하기 위해 7개의 세그먼트를 사용하는데, 이때 3진법을 사용하여 숫자를 표현할 수 있습니다. 예를 들어, 0부터 9까지의 숫자를 3진법으로 표현하면 다음과 같이 됩니다: 0(00), 1(01), 2(10), 3(11), 4(100), 5(101), 6(110), 7(111), 8(1000), 9(1001). 이렇게 3진법을 사용하면 세그먼트 디스플레이에서 숫자를 표현하기가 편리해집니다. 시계의 시, 분, 초 ..
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..
문제 코드 func solution(_ n:Int, _ m:Int) -> [Int] { func gcd(_ a: Int, _ b: Int) -> Int { let mod: Int = a % b return 0 == mod ? min(a, b) : gcd(b, mod) } func lcm(_ a: Int, _ b: Int) -> Int { return a * b / gcd(a, b) } return [gcd(n, m), lcm(n, m)] } 해석 유클리드 호제법을 사용하여 두 수의 최대공약수(GCD)와 최소공배수(LCM)을 찾자. 1. gcd(_ a: Int, _ b: Int) -> Int: 이 함수는 두 수의 최대공약수를 찾는 역할을 합니다. 유클리드 호제법을 사용하여, 두 수의 나머지를 계속해서 구하..
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://azsha.tistory.com/107 [iOS] 개발에 사용하는 라이브러리 정리 & 추천 프로젝트를 하면서 가장 많이 사용하는 라이브러리를 정리 및 추천해볼까 합니다. 어디까지나 주관적인 생각이며, 이 글은 개발하는데 어느정도 참고로만 보시면 좋을 것 같습니다. (2020.08.06 내 azsha.tistory.com https://haningya.tistory.com/33
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..