본문 바로가기

분류 전체보기326

command line tools are already installed (사실 git 에러 아님) 발견 TIL을 치려고 하는데 git add . 을 입력했지만 에러코드가 발생. 깃을 만지는데 왜 xcode어쩌고 하는 에러가 발생하지?? 원인 MacOS 업데이트 후 아주 높은 확률로 git을 비롯한 다수의 개발 툴들이 다 xcrun 에러를 뱉는다. 이는 각 도구들의 문제가 아닌 CommandLineTools를 식별하지 못해 발생한 문제 이렇게 되면 깃 말고도 각종 도구들도 작동하질 않게 된다. 결국 Xcode 에러라고 봐야하나 Git 에러는 아닌것이다. xcode-select: error: command line tools are already installed, use "Software Update" to install updates 위 메세지가 나오는 경우는 이미 커맨드 라인 툴이 설치되어있는 상태.. 2023. 1. 21.
swift Array - 빠르게 빈 배열 만들기 Array - swift fast init Empty Array 반드시 배열의 타입을 명시해야 한다. 빈 배열은 세 가지 형태로 만들 수 있다. //let emptyArray = [] // error: 타입 명시가 돼 있지 않음. (형식 추론 X) let emptyArray: [Int] = []// 정식 문법 사용 let emptyArray2 = Array()// 단축 문법 사용 let emptyArray3 = [Int]() 2023. 1. 5.
UIImage - 경로를 통해 이미지 다운로드하여 동기, 비동기처리하기 이미지를 Assets에 넣어서 사용하기도 하지만 URL을 통해 가져오는 경우가 있다. 이때 이미지를 다운로드하고 이미지를 세팅하는 동안 다른 작업을 해야하는 경우도 있다. 그땐 Sync처리가 되어있는경우 앱이 잠시 멈추는 듯한 상황이 생기기 때문에 동시에 여러작업이 수반되어야하는 경우는 특별히 스레드를 분배해주어야한다. func loadImage(from imageUrl: String) -> UIImage? { guard let url = URL(string: imageUrl) else { return nil } guard let data = try? Data(contentsOf: url) else { return nil } let image = UIImage(data: data) return image.. 2022. 12. 26.
refresh control 사용하기 웹뷰를 아래로 스와이프하면 새로고침 되는 경험이 있을 것이다. 아이폰의 웹뷰에는 scrollView가 있고 여기에는 refresh control이라 부르는 것을 세팅할 수 있다. 이때 scrollView delegate를 세팅해야하고 특히 scrollView bounce는 false로 해두면 작동하지 않는다. let mainWebView = WKWebView() let refreshControl = UIRefreshControl() self.mainWebView.scrollView.addSubview(refreshControl) refreshControl.addTarget(self, action: #selector(reloadWebView(_:)), for: .valueChanged) /// 웹뷰 리프레.. 2022. 12. 13.
카톡 유튜브 재생목록 유튜브앱으로 실행하기 핸드폰에서 유튜브 재생목록 유튜브앱으로 실행하기 핸드폰 카톡에서 유튜브 재생목록을 주고 받을 때가 있습니다. 한곡이라면 일반적으로 사용하면되지만. 모바일에서는 링크를 타고들어가면 웹사이트로 켜집니다. 여기선 플레이리스트실행이 가능하지만 카톡을 사용할 수가 없어요. 그래서 유튜브에서 열기를 클릭해보면 해당 곡만 실행이 가능합니다. 결국 카톡을 쓰면서 플레이리스트 실행하기가 안되는거죠. 그래서 재생목록 링크를 직접 여는 방법을 사용합니다. 플레이리스트를 유튜브앱에서 여는 방법 카톡에서 플레이리스트 링크 클릭 상단에 URL클릭하고 한번더 클릭하면 옵션이 활성화됩니다. 링크열기 클릭하면 유튜브앱 스키마가 실행되어 바로 플레이리스트가 유튜브앱에서 실행됩니다. 2022. 11. 30.
세로모드 고정 How to Set - 세로모드 고정 Step1. Project - General - Device Orientation - Potrait 체크 만약 여기서 해결이 안되는 경우, Step2 진행 Step2. // AppDelegate.swift func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { // 세로방향 고정 return UIInterfaceOrientationMask.portrait } 2022. 11. 28.
클로저 톺아보기 Closure 톺아보기 클로저는 Named Closure와 Unnamed Closure로 나뉜다. 우리가 흔하게 사용하는 함수는 Named Closure다. 둘다 클로저에 포함되지만 우리가 통상적으로 부르는 클로저는 Unnamed Closure를 말한다. // 1. Named Closure func doSomthing() { print("do something!!!") } // 2. UnnamedClosure let doSomething = { print("do something!!!") } 결국 클로저와 함수는 그게 그것이기 때문에 1급객체의 성질을 가지고 있다. 즉 클로저도 아래의 성질을 갖고있다. 변수나 상수에 대입할 수 있다. 함수의 인자값으로 클로저를 전달할 수 있다. 함수의 반환값으로 클로저를.. 2022. 11. 27.
1급 객체 1급 객체 Swift는 객체지향, 함수형, 프로토콜 프로그래밍을 사용한다. 1급객체의 3가지 특징 변수나 상수에 대입할 수 있다. 함수의 반환값으로 자신을 사용할 수 있다. 함수의 인자값으로 자신을 사용할 수 있다. 이걸 함수에 대입하면 아래와 같다 1급객체함수의 3가지 특징 변수나 상수에 대입할 수 있다. 함수의 반환값으로 함수를 사용할 수 있다. 함수의 인자값으로 함수를 사용할 수 있다. 1. 변수나 상수에 대입할 수 있다. func checkContainStore(storeName: String) -> Bool { let storeArray = ["CU", "GS25", "ministop", "sevenEleven"] return storeArray.contains(storeName) ? true .. 2022. 11. 27.
프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) [참고: 애플문서] [참고: Zedd’s Blog] 프로퍼티 시리즈 저장프로퍼티(feat.클래스와 구조체) - 프로퍼티(1) 연산프로퍼티(Getter/Setter) - 프로퍼티(2) 🍊 프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) 타입프로퍼티(static) - 프로퍼티(3) 프로퍼티 옵저버(Property Observers) 이전글에서 소개한 저장프로퍼티와 연산프로퍼티를 감시할 수 있다. Apple 프로퍼티 옵저버는 자신이 정의한 "저장 프로퍼티"에 추가 할 수 있으며, super class(부모클래스)를 상속한 프로퍼티에도 추가 할 수 있습니다. 프로퍼티 옵저버는 새로운 값이 프로퍼티의 현재값과 "동일하더라도" 속성의 값이 설정(set)될 때 마다 호출됩니다. lazy 저장 프.. 2022. 11. 25.
Date로 두 개의 시간차 구하기 Date로 두 개의 시간차 구하기 테스트를 하다보면 특정부분까지의 시간이 얼마나 걸리는지 알고 싶을 때가 있다. 이때 간단하게 Date함수를 이용해 시작시간과 현재시간을 가지고 시간을 구할 수 있다. 시간차는 Timer를 이용할 수도 있고 아래와 같이 Date를 이용할 수도 있다. 하지만 Date가 간단하게 구현이 가능하니 오늘은 이 방법을 알아보자 타이머 구현 class MainViewController: UIViewController { var startTime: Date? // 시작시간을 저장하는 함수 func startTimer() { let startTime = Date() self.startTime = startTime print("작업시작\(String(describing: self.star.. 2022. 11. 24.