일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RunningTimer
- font book
- 단일 책임원칙
- Required Reason API
- addannotation
- Startign Assignments
- 클로저의 캡슐화
- Protocol
- MKMapItem
- 영문 개인정보처리방침
- swift
- MKMapViewDelegate
- Xcode
- 러닝타이머
- weak var
- weatherKit
- Timer
- UIAlertAction
- dispatchsource
- xcode로 날씨앱 만들기
- WeatherManager
- SwiftUI Boolean 값
- App Store Connect
- 러닝기록앱
- 한국어 개인정보처리방침
- CLLocationManagerDelegate
- CoreLocation
- 서체관리자
- AnyObject
- UICollectionViewFlowLayout
- Today
- Total
목록swift (11)
VesselWheel
https://jochen-holzer.medium.com/embrace-the-evolution-preparing-your-ios-app-for-the-required-reason-api-38f2d12bbce5 Embrace the Evolution: Preparing Your iOS App for the “Required Reason API” Learn how to prepare your iOS app for the required reason API. Step-by-Step guide that helps to prepare the privacy manifest of your app in Xcode. jochen-holzer.medium.com https://developer.apple.com/doc..
코어데이터를 활용하기 위한 CoreDataManager 더보기 // // CoreDataManager.swift // Run-It // // Created by t2023-m0024 on 2/29/24. // import Foundation import CoreData import KakaoSDKUser class CoreDataManager { static let shared = CoreDataManager() private init() {} // MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "Run_It") container...
https://medium.com/@Ariobarxan/ios-application-scene-delegate-vs-app-delegate-a-talk-about-life-cycle-a2ecae9d507e iOS Application Scene Delegate VS App Delegate(A talk about Life cycle) Preface medium.com IOS 13부터는 AppDelegate와 SceneDelegate의 책임이 구분되었다. -> 해석하자면, AppDelegate는 과거에 출시, 종료, 시스템 수준 이벤트 처리 등 앱의 전반적인 라이프사이클을 처리한다. 초기 앱 환경 설정, 앱 수준의 데이터 및 리소스 관리, 푸시 알림 처리 등을 담당한다. 반면에 SceneDelegate는 여..
문제 풀이 func solution(_ s: String, _ n: Int) -> String { let lowerCaseLetters = Array("abcdefghijklmnopqrstuvwxyz") let upperCaseLetters = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ") var result = "" for char in s { if char == " " { result.append(" ") continue } let letters = char.isLowercase ? lowerCaseLetters : upperCaseLetters if let index = letters.firstIndex(of: char) { let shiftedIndex = (index + n) ..
Timer 클래스를 활용해서, 러닝기록 타이머를 구현하려 시도했다. 러닝기록 타이머 만들기(1/3, 2/3)의 글을 통해서 시도하였을 때, 옵셔널 체이닝 방식으로 MyTimer 클래스에서 타이머를 RunLoop에 등록해서 Main thread에서 해당 매소드가 구동되게금 구현하였다. 하지만, Timer 클래스에는 일시정지하는 매소드나 재실행하는 매소드가 없어서 MyTimer 클래스의 코드의 로직이 부족하다. 따라서 dispatchsource 클래스를 활용해서 타이머 클래스를 다시 정의하였다. https://developer.apple.com/documentation/dispatch/dispatchsource DispatchSource | Apple Developer Documentation An obje..
이 글은 1/3에서 활용한 Timer 클래스의 커스텀 매소드를 호출하여 View에서 호출하는 로직을 구현하였다. MyTimer Class 더보기 // // MyTimer.swift // Run-It // // Created by Jason Yang on 2/26/24. // import UIKit import CoreLocation class MyTimer { var timer: Timer? var time = 0 var distance = 0.0 var pace = 0.0 var pausedTime = 0 // 일시정지된 시간을 저장할 변수 var pausedDistance = 0.0 // 일시정지된 거리를 저장할 변수 var pausedPace = 0.0 // 일시정지된 페이스를 저장할 변수 var ..
문제 풀이 - 최초풀이 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]]..
문제 풀이 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..
문제 풀이 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..
MenuView와 OrderListView 간의 데이터 연결을 위해서 MenuDataDelegate를 약한 참조로 연결하였다. weak var delegate: MenuDataDelegate?는 약한 참조를 사용하여 MenuDataDelegate 프로토콜에서 구현한 객체를 참조하는 변수를 선언하는 코드로 이를 통해 객체 간의 통신을 위임하고, 메모리의 누수를 일으키지 않고 안전하게 처리할 수 있게 된다. 약한참조란?(ps. 미소유참조) 더보기 Weak Reference (약한 참조) 약한 참조는 Strong Reference(강한 참조)와는 달리 객체의 참조 count 증가시키지 않습니다. 객체의 생명 주기에 영향을 주지 않으면서 참조를 유지할 수 있습니다. class Person { var name: ..