전체 글380 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. swift 디자인패턴 - State Pattern swift 디자인패턴 - State Pattern 상태를 객체로 나타내기 "상태에 따라 사용할 수 있는 기능들이 달라져야 할때 사용된다." 상태패턴은 객체 내부의 상태에 따라서 객체가 다른 행동을 할 수 있게 해주는 패턴이다. 즉, 객체의 상태만 변경해 주어도, 다른 행동을 하는 객체로 만들어 준다. 상태 패턴은 유한 상태 머신과도 밀접한 관련이 있다. 다만 조건문에 기반한 상태 머신의 단점은, 상태의 수와 상태에 따른 동작이 추가될 때에 크게 드러난다. 대부분의 메서드에서 굉장히 지저분한 조건문이 들어가게 된다. 하지만 상태 패턴은 가능한 모든 상태에 대해서 클래스로 추출하는 방법을 사용한다. 목표 상태패턴을 통해 상태를 객체로 나타내고 행동을 구현한다. 키워드 객체, 상태, 행동 예제 1 구조 1.c.. 2021. 8. 22. swift 디자인패턴 - Strategy Pattern swift 디자인패턴 - Strategy Pattern 언제 사용하나? 어떤 상황에서 사용할 알고리즘이 여러개 존재할때 사용한다. 알고리즘을 런타임에서 변경해야 할때 사용한다. 예) 결제를 할때 결제 수단 선택하기 - 신용카드로 결제, 마일리지로 결제, 포인트로 결제, 쿠폰으로 결제 등등 검색할때 검색 조건 선택하기 - 전체검색, 이미지검색, 뉴스 검색 등등 장점 런타임에서 알고리즘을 변경 할 수 있다. 알고리즘을 사용하는 코드와 알고리즘을 구현하는 코드를 분리할 수 있다. 알고리즘을 사용하는 코드 context를 변경하지 않고도 새로운 전략 기능을 추가 할 수 있다. 단점 알고리즘이 몇개 없을때 복잡성을 증가 시킬수 있다. strategy, context간 통신오버헤드가 발생한다. 목표 인터페이스 개념.. 2021. 8. 22. swift 디자인패턴 - Facade Pattern swift 디자인패턴 - Facade Pattern 퍼사드 패턴의 키워드는 단순한 접근이다. 복잡한 서브시스템을 단순한 하나의 시스템인 퍼사드 클래스를 이용해서 간단하게 접근하게 한다는 개념이다. Facade 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고 있습니다. 클라이언트의 요청을 적절한 Subsystem에게 전달합니다. Subsystem Subsystem 기능을 구현합니다. Facade 객체에서 전달받은 요청을 처리합니다. 서브 시스템 클래스들은 Facade 객체의 존재를 모릅니다. Client 클라이언트는 서브 시스템 객체를 직접 호출하는 대신 Facade를 사용합니다. import Foundation /// 서브 시스템 1 class Subsystem1 { func o.. 2021. 8. 21. swift 디자인패턴 - Adapter Pattern swift 디자인패턴 - Adapter Pattern 언제 사용하나? 1.연관성 없는 두객체를 묶어서 사용해야할때. 2.타사의 라이브러리 or 모듈을 사용해야 할때. 3.같은 프로젝트에서 다른팀이 구현해 놓은 클래스의 기능을 가져다 사용할때. 4.A 팀이 신용카드를 등록하고 조회하는 클래스를 만들어 놓았다. B 팀은 Adapter Pattern 을 만들어서 그 기능을 가져온 다음에 가공해서 사용하면된다. 해결 목표? 이미 주어진 알고리즘(Math 클래스)을 나만의 요구사항에 맞춰서 사용할 수 있다. Adapter의 사전적 의미? 기계. 기구등을 다목적으로 사용하기 위한 부가적인 기구 기본 설계 요구사항 예제 1 import UIKit /// 이미주어진 알고리즘 or 타사의 라이브러리 or 다른 팀의 모듈.. 2021. 8. 21. swift - 최상위 ViewController 구하기 swift - 최상위 ViewController 구하기 /** # getRootViewController - Author: k - Date: - Parameters: - vc: rootViewController 혹은 UITapViewController - Returns: UIViewController? - Note: vc내에서 가장 최상위에 있는 뷰컨트롤러 반환 */ public func getRootViewController(vc:UIViewController) ->UIViewController?{ ///[1] 네비게이션 컨트롤러 if let nc = vc as? UINavigationController { if let vcOfnavController = nc.visibleViewController {.. 2021. 8. 10. swift custom popup - 재사용가능한 팝업 swift custom popup - 재사용가능한 팝업 xib - 디자인 popupVC.swift - 공통 팝업 뷰컨트롤러 // // PopupVC.swift // Po // // Created by k on 2021/08/09. // import UIKit /// 팝업 타입 enum PopupTpye { case alarm //라벨 + 닫기 case textField //라벨 + 텍스트 + (닫기,ok) case closeAndOk //라벨 + (닫기,ok) } class PopupVC: UIViewController { /// 팝업 뷰 @IBOutlet weak var popUpView: UIView! /// 라벨 @IBOutlet weak var labelContent: UILabel! /// 텍스.. 2021. 8. 9. swift 스위치 - 위치이동 swift 스위치 - 위치이동 1.UIView 하나와 그 안에 버튼을 넣어주고 뷰의 높이와 넓이를 설정해준다. 2.뷰를 정렬해준다. Y, x 가운데. 3.버튼의 크기지정해준다. 4.버튼의 y, x 정렬을 가운데 맞춘다. 5.버튼의 포지션 이동을 위해 버튼의 CenterX 부분의 값을 변경해 본다. 6.위에서 스토리 보드에서 만든 컴포넌트를 코드와 연결 시켜 준다. 7.버튼 클릭 후 변경되는 이벤트 로직을 작성해준다. 2021. 8. 2. 이전 1 ··· 9 10 11 12 13 14 15 ··· 43 다음