iOS 프로그래밍은 객체 지향적이다. 객체지향을 모르면 iOS 개발을 하기 어렵다.
이 강의에서는 코코아 터치, 코어 서비스 계층을 주로 다룬다.
iOS는 BSD 계열 Unix이다.
c언어를 기반으로 한다.
Tools : Xcode, Instruments
Language : Swift 또는 Objective-C
Frameworks : 여러 가지가 있지만, 그 중에서도..
Design Strategy : MVC모델
과제 : Swift 매뉴얼 읽기
Xcode의 화면 구성은 네비게이터, 편집기, 유틸리티로 구성되어 있다.
콘솔 : 데이터를 출력해주는 기능. 디버깅에도 사용 가능
시뮬레이터 : 왼쪽 위 실행 가능한 버튼 - 각 아이폰, 아이패드 등 맥 기기들에서 시뮬레이션할 수 있다.
재생 버튼 : 실행 버튼. 내가 만든 앱을 돌려볼 수 있다. 기기 버전을 선택해 실행한다.
옵션 + 마우스 스크롤 시 UI 영역을 확대/축소할 수 있다
UI 영역을 누른 뒤, Shift + Command + L
또는 오른쪽 위 중간쯤의 + 버튼.
버튼, 슬라이더, 라벨 등 앱 UI 구성에 필요한 요소들이 들어 있다.
UI에 원하는 항목을 드래그하여 사용함
UI의 항목이 무엇을 하게 하려면..
이 게임에서는 버튼을 누르면 어떤 메소드가 호출되어야 한다.
따라서
@IBAction : 메서드 첫 라인이 원형으로 바뀌며, 이 영역에 마우스를 올리면 UI의 어떤 부분에서 해당 메서드를 호출하는지 표시해 준다.
@IBAction func touchCard(_ sender: UIButton) {
}
스위프트가 다른 언어들과 다른 점 2가지
- 모든 인수에는 이름이 있다. 메소드를 호출할 때 이 이름을 포함해야 함
- 인수에는 두 개의 이름이 있다. 하나는 외부 이름(전달인자 레이블 Argument Label, 외부에서 호출할 때 사용), 하나는 내부 이름(매개변수 이름 Parameter Name, 내부에서 코드 구현에 사용)
Xcode > Behaviors > Edit Behaviors > Running > Generates Output 에서
Show debugger with Variables & Console View 체크 활성화하기.
메서드 변수명을 지을 때 중요한 것은, 누군가 이 코드를 읽을 때 영어처럼 읽혀져야 한다는 것이다!!
예를 들어
func flipCard(withEmoji emoji : String, on button: UIButton) {} 함수가 있을 때
이를 호출할 때는
flipCard(withEmoji: "👻", on: sender) 로 작성하므로
"Flip card with emoji ghost on sender" 라고 영어처럼 읽을 수 있다.
❓
func touchCard(_ sender: UIButton){}처럼, 라이브러리에서 상속받은 클래스 메서드에 _를 사용하는 이유다른 프로그래밍언어면 몰라도, Swift에서는 _ 를 거의 사용하지 않는다 (Argument Label 대신에)
우리도 코딩할 때에 Argument Label과 Parameter Name을 모두 붙여 주는 것이 좋다.
상속받은 클래스에 _ 가 있는 이유는, 몇몇 클래스들이 Objective-C에서 왔기 때문이며 Objective-C에는 Argument Label이라는 개념이 없기 때문임!
Option + 마우스 왼쪽 클릭
도움말이 나온다.
도움말에서 모르는 내용을 클릭하면 문서가 열리며 사용법을 참고할 수 있다.
모르는 메서드를 사용해야 할 때 사용법에 대해 그 문서를 볼 수 있다.
⭐️특히, 자주 사용하는 클래스의 Overview를 다 읽어보는 것을 강력 추천함!!
button.backgroundColor = Color 까지 입력하면 Color를 Color Literal 로 선택할 수 있다.
선택 시 네모가 생기며, 네모를 클릭해 화면으로 보면서 원하는 색상을 고를 수 있다.
: 이미 만들어 놓은 카드를 복사해 쓸 수 있다.
인터페이스 빌더에서 Command C V로 복사.
처음부터 새로 만드는 것보다 이미 만든 것을 복사하는 것이 효율적 (새로 설정할 필요가 업음)
⚠️ 자주 하는 실수
UI에서 요소를 복사하면, 요소에 연결된 메서드들도 함께 복사됨.
이는 의도하지 않은 동작 오류를 만들 수 있으니 주의해야 함!
복사된 설정을 수정하기 위해서는 UI에 오른쪽 클릭을 통해 설정을 바꿀 수 있음.
\()print문에서 문자열 출력 시 사용 가능
소괄호 안에 넣은 대상을 문자열로 해석하고 그 문자열을 출력함
스위프트에서 대부분의 대상들을 이 기호로 출력 가능
@IBOutlet)를 만듦. @IBAction)를 만듦.@IBOutlet))을 만듦. UI 에 있는 것들의 배열Swift is extreamly strongly typed language.
대신 스위프트는 강한 타입 추론 언어이기도 하다.
var flipCount : Int = 0 이 아니라 var flipCount = 0 이라고만 적어도 괜찮은 이유이다 ❗️어떤 상황이든지 코드를 "복사 붙여넣기" 하는 것은 옳지 않다.
모든 프로퍼티 뒤에는 didSet이라는 코드를 추가할 수 있다.
해당 프로퍼티가 변경될 때 마다 didSet 코드가 실행된다.
UI 와 프로퍼티의 싱크를 맞추기 위해 매우 자주 사용된다.
: Command + 대상 클릭.
해당 변수를 사용하는 모든 지점을 찾아 함께 변경해준다.
스위프트에서 변하지 않는 값은 반드시 상수(let)로 표기해야 한다.
변하지 않는 값인데 var로 표기하지 말아라. 절대!
옵셔널은 열거형으로 구현되어 있으며,
오직 두 가지 상태를 가지는 타입이다.
또, 스위프트에서의 열거형은 각 경우마다 관련 데이터를 가질 수 있다.
열거형 : 불연속형 값들의 모음
옵셔널이 설정된 상태(Set) 라면 관련 데이터를 가진다.
옵셔널이 설정되지 않은 상태라면 nil이 된다.
nil : 스위프트에서 "설정되지 않은 옵셔널"을 의미함
옵셔널! : 해당 옵셔널이 설정된 상태라고 가정하고, 관련 값을 가져온다.if let 조건문 : 해당 옵셔널이 설정된 상태일 때만 관련 값을 가져온다.