STUDY/Swift 17

Swift nil 병합 연산자, 옵셔널 관련 연산자

import UIKit let someOptionalInt: Int? = nil // 삼항 조건 연산자// Question ? A : B// Question(불리언 값)이 참이면 A를, 거짓이면 B를 반환// someOptionalInt가 값이 들어있으면 그 값을 반환하고, 아니면 0을 반환한다.let valueInt: Int = someOptionalInt != nil ? someOptionalInt! : 0 // valueInt = 0 // nil 병합 연산자// A ?? B// A가 nil이 아니면 A를 반환, A가 nil이면 B를 반환let valueInt2: Int = someOptionalInt ?? 0 // valueInt = 0 // 같은 결과를 볼 수 있지만, nil 병합 연산자를 사용하..

STUDY/Swift 2018.06.29

Swift 구조체와 클래스 [Struct, Class]

구조체와 클래스 구조체와 클래스는 프로그래머가 데이털르 용도에 맞게 묶어 표현하고자 할 때 용이하다. 구조체와 클래스는 프로퍼티와 메소드를 사용하여 구조화된 데이터와 기능을 가질 수 있다. 하나의 새로운 사용자지정의 데이터 타입을 만들어주는 것이다. 스위프트에서는 구조체와 클래스의 모습과 문법이 거의 흡사하지만, 구조체의 인스턴스는 값 타입이고, 클래스의 인스턴스는 참조 타입이라는 큰 차이점이 존재한다. => ‘무엇이 전달되느냐’가 다르다. 예를 들어 어떤 함수의 전달인자로 값 타입의 값을 넘긴다면 전달될 값이 복사되어 전달되지만, 참조 타입이 전달인자로 전달될 때에는 값을 복사하지 않고 참조(주소)가 전달된다. 참조라는 것은 C, C++, Objective-C 등의 언어에서 사용되는 포인터와 유사한 개..

STUDY/Swift 2018.06.29

Swift 클로저 [Closure]

Swift4 Closure0. 함수는 클로저의 일종이다.1. 함수의 전달인자로서의 클로저 사용: 함수를 선언하고 사용할 때 주고받는 전달인자의 자리에 클로저를 쓸 수 있다.2. 기본 클로저: 매개인자들이 사용 되어지는 자리에 쓰인다.3. 후행 클로저: 클로저가 함수의 마지막 전달인자라면 소괄호 ')' 이후에, 외부에 클로저를 구현할 수 있다. (함수의 선언이 아니라 사용할 때 이야기)4. 반환타입 생략 가능: 우리는 앞서 선언했기 때문에(아래 3번째 줄), 사용할 때 반환 타입을 생략할 수 있다. (컴파일러가 이미 반환타입을 알고 있기 때문)5. 단축 인자 이름 사용 가능: 매개변수의 이름이 굳이 불필요 하다면, 순서대로 $0, $1, ... 이렇게 사용할 수 있다.6. 암시적 반환 표현: 클로저 마지막..

STUDY/Swift 2018.06.22

Swift 3.0 Thread 1:signal SIGABRT

Thread 1:signal SIGABRT 위와 같은 에러가 발생하였다면, 확인해볼 것이 하나가 있다.지금 연결이 잘 되어있는지. 커넥션 인스펙터를 통해 확인을 해보면, 아울렛 변수 연결(뷰 컨트롤러와 클래스 사이의 연결)이 하나 되어있다고 나온다. 이번엔 ViewController.swift 안의 내용을 봐보자. 없다. 주석처리 된 부분이 주석처리가 되지 않았다면 위와 같은 에러는 발생하지 않았을 것이다. 결론Thread 1: signal SIGABRT는 뷰 컨트롤러(씬)과 객체 간의 연결이 제대로 되어있지 않을 경우에 발생하는 에러이다. 솔루션1. 커넥션 인스펙터에 존재하는 연결을 x 버튼을 클릭해 삭제한다. or2. ViewController.swift에 해당 코드가 있으면 된다. 위에서는 주석친 ..

STUDY/Swift 2016.12.13

iOS 앱 실행과정

1. main() 함수가 실행된다. * main() 함수는 Xcode 내에서 직접적으로 작성하지 않는 부분이다. 즉 건드릴 필요가 없는 부분이다.2. main() 함수는 다시 UIApplicationMain() 함수를 호출한다.3. UIApplicationMain() 함수는 앱의 본체에 해당하는 UIApplication 객체를 생성한다.4. UIApplication 객체는 info.plist 파일을 바탕으로 앱에 필요한 데이터와 객체를 로드한다.5. AppDelegate 객체를 생성하고 UIApplication 객체와 연결한다.6. 이벤트 루프를 만드는 등 실행에 필요한 준비(초기 데이터 구조를 설정하거나 즉, 커스텀 코드를 작성하는 것)를 한다.7. 실행 완료 직전, 앱 델리게이트의 applicatio..

STUDY/Swift 2016.12.08

앱 시작화면 시간 늘이기, 앱 실행 지연 시키기

application(_:didFinishLaunchingWithOptions:) 메소드의 실행이 완전히 끝나지 않는 한 메인 화면은 실행되지 않기 때문에 메소드 내부에서 프로세스의 실행이 5초 동안 지연되면, 그 시간만큼 로딩 화면이 계속 표시되는 효과 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. sleep(5)ㄷ return true } 5초간 잠들어라!

STUDY/Swift 2016.12.08