Swift

· iOS
뷰 컨트롤러 사이에 값을 주고받는 방식은 2가지 개념으로 나누어진다. 직접 전달 방식 (동기 방식) 간접 전달 방식 (비동기 방식) 직접 전달 방식 (동기 방식) 뷰 컨트롤러 --> 뷰 컨트롤러로 데이터를 직접 전달하는 방식이다. 주로 영속적으로 값을 저장할 필요가 없는 화면 전환 시에 사용된다. ex) 선택 카테고리 값을 전달받는 쪽의 뷰 컨트롤러가 전달받을 값의 명세를 모두 파악하고 이를 대입할 변수를 미리 생성해 두어야 한다. [ 전달 과정 (VC1 --> VC2) ] VC1에서 VC2로 전달할 값을 준비한다. VC2에서는 값을 대입받을 프로퍼티를 정의한다. VC1에서는 VC2의 인스턴스를 직접 생성하거나, 이미 생성되어 있는 인스턴스의 참조를 읽어온다. VC1에서는 2. 에서 정의한 VC2 인스턴..
· iOS
앞서 공부한 세그웨이를 사용해서 화면을 전환할 경우 화면 복귀를 할 때는 2번째 뷰 컨트롤러에서 1번째 뷰 컨트롤러로 향하는 세그웨이를 추가해주면 될 것이라고 생각할 수 있다. 하지만 이렇게 할 경우 오류가 발생한다. 세그웨이는 목적지가 되는 뷰 컨트롤러의 인스턴스를 자동으로 생성해준다. 따라서 2번째-->1번째 뷰 컨트롤러로 새로운 세그웨이를 연결하면 기존에 존재하면 1번째 뷰 컨트롤러의 인스턴스 말고도 추가적으로 새로운 인스턴스가 하나 더 생기게 된다. 이렇게 되면 동일한 뷰 컨트롤러가 중복되기 때문에 앱에서 오류가 발생할 수 있다. 일반적으로 iOS에서 뷰 컨트롤러의 인스턴스는 한개 이상 존재해서는 안 된다!! 세그웨이에서 Unwind를 구현할 때도 앞에서 공부한 화면 복귀용 메소드를 이용할 수 있..
· iOS
iOS의 화면 전환 방식은 크게 4가지 정도로 나눌 수 있다. 뷰 컨트롤러의 뷰 위에 다른 뷰를 가져와 바꿔치기 (Container View Controller 사용) 뷰 컨트롤러에서 다른 뷰 컨트롤러를 호출하여 화면 전환 내비게이션 컨트롤러를 사용하여 화면 전환 화면 전환용 객체 세그웨이(Sequeway)를 사용하여 화면 전환하기 iOS에서 화면 전환은 다음의 2가지 특성을 가진다. 다음 화면으로 이동하는 방법과 이전 화면으로 되돌아가는 방법이 다름 화면 전환 방식에 따라 이전 화면으로 되돌아가는 방법이 다름 화면 전환 기법 1. 뷰를 이용한 화면 전환 (비추천) 하나의 뷰 컨트롤러 안에 두개의 루트 뷰를 준비하고, 상태에 따라 뷰를 적절히 교체해주는 방식이다. 뷰를 완전히 바꿔치기 할 수도 있고, 기..
· iOS
시스템 프레임워크는 사용자가 앱 아이콘을 터치하여 실행했을 때 이를 인식하고 앱을 구동해준다. 그러면 최초에 main() 함수가 실행되고, 함수 내부에서 UIApplicationMain() 함수를 호출하면 앱이 구동된다. (스위프트에서는 @main 어노테이션을 찾아 해당하는 클래스를 실행) 커스텀 코드 쪽에서는 앱 델리게이트 클래스에 작성된 application(_:didFinishingLaunchingWithOperations:) 메소드가 시스템에 의해 자동으로 호출된다. AppDelegate 클래스의 application(_:didFinishingLaunchingWithOperations:) 메소드에는 앱이 처음 시작될 때 실행될 코드를 작성해줄 수 있다. 이어서 시스템 프레임워크의 이벤트 루프가 실..
· iOS
View Controller (뷰 컨트롤러) 앱의 화면을 관리하기 위한 코드 작성 (이벤트 발생 시 수행될 코드 작성), 일반적으로 화면의 개수만큼 필요하다. Storyboard (스토리보드) 앱에 사용되는 여러 화면을 하나의 파일에 모아 설계할 수 있도록 지원하는 UI 설계용 파일 형식 코드 없이 UI/UX 화면 구성 가능 앱의 전체 구조를 쉽게 파악 가능 Seque (세그웨이) 스토리보드를 통해 화면 전환 시 출발지와 목적지를 직접 지정하는 방식을 세그웨이를 이용한 화면 전환이라고 한다. 두개의 뷰 컨트롤러 사이에 연결된 화면 전환 객체를 세그웨이 라고 함. 마우스 우클릭 드래그, 혹은 ctrl + 드래그로 화면 연결 UIViewController UIKit 프레임워크에 정의되어 있는 클래스로, 기본..
· Swift
클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다. (함수는 클로저의 한 형태로, 이름이 있는 클로저라고 보면 된다.) 변수, 상수 등으로 저장이 가능하고, 전달인자로도 전달이 가능하다. 클로저 정의 { (매개변수 목록) -> 반환타입 in 실행 코드 } 클로저 사용 예시 클로저는 주로 함수의 전달 인자로 많이 사용된다. (콜백 함수 등) 함수 전달인자로 클로저 사용 예시 클로저 고급 클로저를 더 편리하고 간결하게 사용하기 위해서 아래와 같은 방법들을 사용해 줄 수 있다. 후행 클로저 반환타입 생략 단축 인자이름 암시적 반환 표현 [ 후행 클로저 ] 클로저가 함수의 마지막 전달인자라면 마지막 매개변수 이름을 생략한 후, 함수 소괄호 외부에 클로저를 구현할 수 있다. 괄호 위치가 헷갈..
· Swift
[ 클래스 - Class ] 전통적인 OOP 관점에서의 클래스 단일상속 (인스턴스 / 타입) 메서드 (인스턴스 / 타입) 프로퍼티 참조 타입 Apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스로 구성되어 있다. [ 구조체 - Struct ] C 언어 등의 구조체보다 다양한 기능 상속 불가 (인스턴스 / 타입) 메서드 (인스턴스 / 타입) 프로퍼티 값 타입 Swift 대부분의 큰 뼈대는 모두 구조체로 구성되어 있다. [ 열거형 - Enum ] 다른 언어의 열거형과는 많이 다름 상속 불가 (인스턴스 / 타입) 메서드 (인스턴스 / 타입) 프로퍼티 값 타입 유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의한 타입 ex) 요일, 월 등 열거형 자체가 하나의 데이터 타입이고, 열거형의 case 하..
· Swift
Swift의 열거형은 다른 언어들의 열거형에 비해서 강력한 기능을 갖고 있다. [ 열거형 - enum ] 열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다. 열거형은 배열, 딕셔너리 등의 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가하다. 때문에 열거형은 아래 같은 경우에 주로 사용해준다. 제한된 선택지를 주고 싶을 때 정해진 값 외에는 입력받고 싶지 않을 때 예상된 입력 값이 한정되어 있을 때 열거형의 이름은 타입이므로 대문자 카멜케이스를 사용하여 이름을 정의해준다. 스위프트의 열거형은 각각의 case가 고유의 값으로 취급된다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 ... } // 열거형 예시 enum Weekday { cas..
· Swift
스위프트에서는 구조체와 클래스의 모습과 문법이 거의 흡사하다. 프로퍼티, 메서드, 이니셜라이저 정의가 가능하고 그 밖에도 여러 공통점이 존재한다. 하지만 차이점도 분명 존재하며, 이 둘을 구분하는 가장 큰 차이점은 구조체의 인스턴스 -> 값 타입 클래스의 인스턴스 -> 참조 타입 (포인터와 유사한 개념) 이라고 볼 수 있다. 추가적인 차이점들은 다음과 같다. 구조체는 상속할 수 없다. 타입캐스팅은 클래스의 인스턴스에만 허용된다. 디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있다. 참조 횟수 계산은 클래스의 인스턴스에만 적용된다. [ 구조체 ] 스위프트에서는 대부분의 타입이 구조체로 이루어져 있을 정도로 구조체가 중요한 역할을 담당한다. struct 이름 { 구현부 } // [ 구조체 선언 ] stru..
· Swift
[ Optional ] 옵셔널이란 값이 있을 수도 있고, 값이 없을 수도 있다는 것을 뜻한다. let optionalValue: Optional = nil let optionalValue: Int? = nil Optional이 필요한 이유? nil의 가능성을 명시적으로 표현해줄 수 있기 때문이다. (nil의 가능성을 문서화 하지 않아도 코드만으로 충분히 표현 가능) 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않더라도 안심하고 사용할 수 있다. 아래 예제와 같이 Int?(옵셔널) 타입이 명시된 함수에는 nil을 전달할 수 있지만 그렇지 않은 함수에는 nil을 전달할 수 없다. Optional의 표현 ! (Implicitly Unwrapped Optional, 암시적 추출 옵셔널) // [ 암시적 ..
kybeen
'Swift' 태그의 글 목록 (2 Page)