아이폰 개발186 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. swift Dynamic Font (aspect ratio & multiplier & autoshrink) swift Dynamic Font (aspect ratio & multiplier & autoshrink) 1.1009 x 1438 크기의 이미지를 준비한다. 2.이미지를 클릭하고 왼쪽 오른쪽 제약조건을 각각 20으로 주고, 정렬를 vertically in container 를 해주고, aspect ratio 설정을 해준다. content mode 는 aspect fit으로 설정한다. 3.aspect ratio 의 multiplier 비율을 이미지 크기와 동일하게 설정해준다. 4.라벨을(공인인증서) 이미지 중앙 상단에 표시하기 위해서 라벨을 추가하고, 이미지와 라벨의 정렬을 맞춰준다. top edges , 와 horizental centers 를 맞춰준다. 그리고 top edges 의 multiplier.. 2021. 8. 1. swift Popup 2 Align Important swift Popup 2 Align Important 1.부모창에서 팝업 버튼 클릭했을때 이전에 만든 팝업 viewController 띄워주기. 2.팝업 뷰컨트롤러의 배경을 연하게 하기 view의 alpha값을 조정하면 뷰의 하위뷰 모두 연해지고, 뷰의 background 선택 후 custom 선택후 opacity를 조정하면 배경 뷰의 색상만 연해진다. 3. 위에서 팝업 뷰 컨트롤러 열때 modal 속성을 추가해준다. 팝업뷰의 투명도를 설정되게 열어주겠다는 코드. 이 한줄을 추가해주면, 부모뷰의 콘텐츠도 보인다. 참고 팝업뷰컨트롤러의 우측 상단의 버튼은 팝업뷰 안에 걸쳐져 있는 부분만 선택이 되고 팝업뷰 밖에 나와있는 부분은 선택(클릭)이 안된다. 그래서 버튼을 팝업 뷰 안에 위치 시키지 말고, 팝업 뷰.. 2021. 7. 31. 이전 1 2 3 4 5 6 7 8 ··· 21 다음