일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인터페이스
- 클린소프트웨어
- 아이폰프로그래밍
- 함수형프로그래밍
- 고차함수
- protocol
- 객체지향프로그래밍
- SWIFT
- Solid
- 디자인패턴
- 의존성
- 클린코드
- 개발
- OOP
- DesignPattern
- 네이밍
- 문법
- 협업
- fp
- CleanCode
- interface
- IOS
- Swfit
- 부스트코스
- 의도
- 개발자
- 함수형패러다임
- iOS프로그래밍
- 이름
- POP
- Today
- Total
목록SWIFT (12)
밤에 쓴 코드
Segue 하나의 Scene 으로부터 다른 Scene으로의 전환을 보여주는 연결입니다. Segue Type Symbol Type Description Show (Push) 이 segue는 target view controller의 showViewController:sender: 가 실행된다. 일반적으로는 source View Controller위에 새로운 컨텐트가 모달로 보여진다. 몇몇 뷰컨트롤러들은 해당 메소드가 재정의 되어있어서 다른동작을 한다. UIKit은 targetViewControllerForAction:sender:메소드로 source View Controller 를 찾는다. 예) NavigationViewController 는 새로운 뷰컨트롤러를 네비게이션 스택에 push 한다. Show ..
ViewController의 특징과 생명주기 Responsibility (뷰컨트롤러의 책임) 주요한 데이터의 변화에 응답으로 뷰들의 컨텐트들을 업데이트 한다. 뷰들과 함께 사용자와의 대화에 응답한다. - 이벤트 핸들링 뷰들의 사이즈 재조정과 전반적인 인터페이스의 레이아웃을 관리한다. 다른 객체(뷰컨트롤러 등)들과 함께 앱을 구성한다. ViewController Type 뷰컨트롤러는 두가지 타입이 존재한다. 일반적으로 흔히 보는 인터페이스 빌더로 생성시 기본으로 생성되는 ViewController는 Content View Controller에 해당한다. NavigationViewController / TabBarViewController 처럼 여러 개의 View Controller를 제어하는 뷰 컨트롤..
UITabBarController, UITabBar UITabBar 일반적으로 하단 모서리에 위치한다. radio - style 을 가졌다. - 하나가 선택되고 다중선택을 불가능하다. UITabBarItem을 하나 이상 가진다. backGround 이미지를 설정할 수 있다. tintColor 를 설정할 수있다 TabBar를 직접 생성하게 되면 TabBar 내의 TabItem 을 직접 추가 삭제 변경, 선택에 대한 응답을 제어하기 위해서는 delegate 가 필요합니다. UIToolBar ToolBar 는 작업 집합들을 관리한다.현재 뷰와 관련된 작업을 보여준다. UITabBar TabBar는 앱의 모드를 관리하고, 앱 전체와 관련이 있다. Attributes Description Associated Pr..
제네릭 제네릭은 일종의 자리맡기 타입 (place holder) 을 이용한 구현이다 배열과 딕셔너리 같이 많은 어떤 특정 조건만 준수하면 어떤 타입이든 수용할 수 있는 구조체들이 존재한다. Generic을 한국어로 표현하면 포괄적인,일반적인 이라고 표현됨을 인지하고 프로그래밍에서의 Generic을 이해해보자 일단 제네릭표현법을 코드로 작성해보겠다. 이전에 사용자정의 연산자를 인용하여 진행한다. infix operator func (lhs: inout Int, rhs: inout Int) { let temp = lhs lhs = rhs rhs = temp } 위와 같이 서로를 바꾸는 연산자를 구현했다. var a: Int = 1 var b: Int = 2 print("a: \(a) , b: \(b)") /..
사용자 정의 연산자 Swift 기본연산자 , ! , = , … 연산을 기호화하여 기호형태로 연산자 들을 지원한다. 함수도 하나의 연산이다. 함수를 연산자의 형태로 표현할 수도 있지 않을까? 사용자정의 연산자를 정의함으로써, 커스텀메소드를 부호화 할 수있다. Swift에서는 증감연산자를 기본적으로 지원하지는 않는다. 하지만 타 언어 ( Java,C++,…) 에서는 a++ , a—- 형태로 증감연산자를 지원한다. 하지만 Swift에서도 사용자가 정의하여서 사용할 수 있다. extension Int { mutating func increase() { self+=1 } mutating func decrease() { self-=1 } }위와 같이 Int 구조체를 확장하였다. var number: In..
클로저 - Closures 클로저는 자신이 선언된 컨텍스트로부터 상수나 변수 저장하고, 붙잡아 둘수 있습니다. 클로저의 형태 전역함수는 이름을가진 클로저의 형태이고 , 값을 붙잡아 둘 수 없습니다. 중첩함수는 이름을 가진 클로저의 형태이고 , 자신을 가지고 있는 함수의 값을 붙잡아 둘 수 있습니다. 클로저표현식은 이름을 가지지 않은 클로저의 형태이고 , 자신 주위 컨텍스트의 값을 붙잡아 둘 수 있습니다. Closure Expression Syntax - 클로저 표현식 { (parameters) -> return type in statements } 정수형 배열을 문자열 배열로 변환하기 함수를 이용한 정렬 var numbers = [9,3,2,4,1,5,8,7,6,0] func asendingOrder(_..
Swift) POP - Protocol Oriented Programming 상속의 한계 상속의 계층 구조가 깊어질수록 복잡도가 올라간다. 값 타입 (ex - struct)는 상속이 불가능 프로퍼티 추가 불가능 추상화된 클래스를 구체화했을 때 공통적인 책임을 가지는 여러 클래스가 존재할 수 있고, 중복된 코드를 야기한다. *중복된 상황 - 억지로 만들어낸 예시 * class Bird{ // 모든 새가 날수있는건 아니어서 동작 추가 불가능 } class Owl : Bird { func fly(){ print("훨~ 훨~") } // 비행한다 - 중복 } } class Pigeon : Bird { func fly(){ print("훨~ 훨~") } // 비행한다 - 중복 } } class Penguin : ..
Swift) Extension 익스텐션 사용하는 이유 기존 타입의 기능확장 확장된 코드 영역은 비교적 side effect 에서 자유로움 기능별로 단위를 묶어서 표현하기 쉬움 특징 *열거형, 구조체, 클래스, 프로토콜 확장 가능 * 재정의는 불가능 연산프로퍼티 추가가능 상속과는 달리 수평적 기능 추가의 느낌이 있음 사용 예시 기존의 기본클래스(구조체)의 기능적 확장 extension Int{ func changeToString ->(String){ return "\(self)" } } Default Implement - 프로토콜 기본구현 protocol runable{ func run() } extension runable{ func run(){ print("뒤뚱뒤뚱") } } TypeAlias 와 함께..