본문 바로가기

아이폰 개발186

swift DispatchGroup 과 DispatchSemaphore 실무에 사용+ 실험 swift DispatchGroup 과 DispatchSemaphore 실무에 사용+ 실험 ios 앱 개발할때 DispatchGroup과 semaphore 를 사용할 기회가 많이 없는데, 이번에 둘다 사용해 보게되었다. 먼저, 개발 중인 앱에는 결제 프로세스가 있다. 첫번째 요구사항 정의는 모든 결제는 한번에 하나만 할 수 있다 였다. 즉, 장바구니 개념이 없고, 결제 한번에 하나의 품목만 결제를 할 수 있다. 결제 api 는 1. 결제 api 호출 , 2. 결제 확인 api 호출 순으로 총 2번 순서대로 호출해야했다. 호출이 완료되면 다음 화면을 push 해주면 되었다. 그래서 아래와 같이 1.결제처리 함수, 2. 결제확인함수를 만들어 주었다. import UIKit import Foundation /.. 2021. 12. 7.
swift custom loading view, custom indicator swift custom loading view, custom indicator 만들어볼 custom indicator 네트워크 통신을 할때, 앱위에 로딩뷰나 인디케이터를 띄워준다. 사용자에게 무언가가 일어나고있다는 걸 보여주고, 작동중이니 걱정말라는 표시도 될 수 있다. 너무 길어지면 안되겠지만. 위 그림처럼 start 버튼을 누르면 이미지가 다양하게 바뀌면서 loading view 를 띄워주거나, indicator 를 띄워주는 예제를 정리해보았다. 먼저 loading view는 아래와 같이 스토리 보드로 만들어주었다. UIView type의 커스텀 클래스를 하나 만들어서 스토리 보드와 이어준다. loading view나 custom indicator 만드는 방법은 여러가지가 있을 것 같다. 나는 cus.. 2021. 10. 25.
swift AVAudioPlayer 로 음악앱 만들기 swift AVAudioPlayer 로 음악앱 만들기 스토리 보드 구성은 아래와 같이 음악 리스트를 보여줄 뷰 컨트롤러 하나. 음악을 재생시킬 뷰컨트롤러 하나. 총 두개를 만들고 네비게이션 컨트롤러로 만들어 준다. ViewController.swift - 음악 리스트 보여주기 import UIKit class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{ @IBOutlet var table:UITableView! var songs = [Song]() override func viewDidLoad() { super.viewDidLoad() configureSongs() self.table.delegate = se.. 2021. 10. 10.
swift network conection 체크 - 인터넷 연결 체크 swift network conection 체크 - 인터넷 연결 체크 ios 에서는 NWNetworkMonitor 라이브러리를 이용해서 지금 폰이 인터넷에 연결이 되어 있는지 안되어 있는지 체크를 할수 있다. 그리고 와이파이에 연결이 되어 있는지, lte에 연결이 되어 있는지 등을 알수 있다. 그리고 네트워크가 끊겼을때도 백그라운드에서 계속 감지하고 있다가 실시간으로 알려준다. 싱글톤 클래스로 네트워크 연결하는 클래스를 만든다. import Foundation import Network final class NetworkMonitor{ static let shared = NetworkMonitor() private let queue = DispatchQueue.global() private let mon.. 2021. 10. 6.
swift stackview 안에 view 동적으로 생성하기 swift stackview 안에 view 동적으로 생성하기 위의 사진처럼 이름과 나이가 들어있는 view를 코드로 동적으로 생성해보자. 스토리보드는 대략 아래처럼 만들어 놓았다. 스택뷰하나를 생성하고, 스택뷰 안에 뷰를 세개 생성해 놓았다. 이제 3번째 칸에 2개의 뷰를 동적으로 넣어보자. import UIKit class ViewController: UIViewController { //스택뷰 @IBOutlet weak var stackView: UIStackView! override func viewDidLoad() { super.viewDidLoad() insertViewsInStackView() } func insertViewsInStackView(){ var viewDataList : [[St.. 2021. 10. 5.
swift 함수형 프로그래밍 정리 swift 함수형 프로그래밍 정리 1.순수함수 1.함수의 동작이 외부에 있는 변수에 영향을 받거나 주지 않는다. 2.특정 input에 대해서 항상 동일한 output을 낸다. 3.특정 입력값에 대해서 항상 동일한 결과를 낸다. 문제 1 - 주어진 코드에서 외부변수를 사용하지 않는 순수함수로 변경하세요 var sum = 0 func solution(_ nums: [Int]) -> Int { for i in nums { sum += i } return sum } let nums = [1,2,3,4,5] let numAddRst = solution(nums) print("numAddRst : \(numAddRst)") //numAddRst : 15 풀이 1 - 전역변수 sum을 함수안으로 옮겨서 지역변수로 만.. 2021. 9. 28.
swift DispatchGroup 과 DispatchSemaphore - 2 swift DispatchGroup 과 DispatchSemaphore - 2 [*] for 문을 이용해서 비동기 함수를 호출했을때 문제상황과 해결법 문제 아래 print 함수는 fetchData 함수가 리턴되는 콜백함수를 호출하기 전에 호출되어서 "text: " 으로 출력된다. // 지연 후에 Int를 String으로 변환하는 함수 func fetchData(_ data: Int, delay: Double, completionHandler: @escaping (String)->()) { print("fetchData - 진입 ") DispatchQueue.main.asyncAfter(deadline: .now() + delay) { print("fetchData - data \(data) ") comp.. 2021. 9. 25.
swift DispatchGroup 과 DispatchSemaphore - 1 swift DispatchGroup 과 DispatchSemaphore - 1 ios 에서는 여러작업 (task)을 처리하기 위해서는 어디로 작업을 보내야하나? 바로 queue (대기행렬) 이다. 작업을 queue에 보내면 알아서 os가 다른 스레드로 분산처리를 해주도록 한다. main thread 에 쌓인 task를 queue에 보내기만 하면 , queue 가 다른 스레드를 적절히 생성해서 분배해준다. queue에 쌓인 task는 누가 처리하나? "GCD" GCD는 Queue에 작업을 보내면 스레드를 적절히 생성해서 분배해주는 역할을 한다. 그리고 GCD에서 사용하는 queue의 이름이 Dispatch Queue 이다. 즉, Dispatch Queue에 작업을 추가하면 GCD는 작업에 맞는 스레드를 자.. 2021. 9. 25.
swift Date 날짜 달력 관련 클래스 정리 swift Date 날짜 달력 관련 클래스 정리 현재표준시간 //MARK: 현재표준시간 let date1 = NSDate() print(" date1 : \(date1)") // date1 : 2021-09-24 14:32:48 +0000 현시점을 기준으로 여러연산을 초단위를 이용하는법 //MARK: 현시점을 기준으로 여러연산을 초단위를 이용하는법 /// timeInterval: double형의 초 (86400초(하루)) /// 현재 시점의 날짜와 시간(시스템에 찍힌) let now = Date() print(" now : \(now)") ///현재 날짜를 기준으로 매개변수로 전달된 TimeInterval만큼 후의 시간(-값을 전달할 경우 전의 시간) let tomorrowFromNow = Date(ti.. 2021. 9. 24.