라이브러리는 특정 명령 수행에 필요한 함수들을 모아놓은 상자 (📦) 입니다.
UIKit
은 UIView
, UIButton
, UILabel
, UIImage
등 UI 요소를 그려나가는데 필요한 것들을 제공하는 라이브러리 입니다.
import UIKit
주석에는 //
또는 /* ... */
를 사용합니다. // MARK:
를 사용하면 문단을 나눌 수 있습니다.
// 주석
/*
어떤 문구
*/
// MARK: - 선으로 문단 나누기
// MARK: 선없이 문단 나누기
(변수 종류) (변수 이름) (변수 타입 또는 변수의 값) 순으로 변수를 선언합니다.
- 변수 종류에는
let
과var
가 있으며 변하지 않는 값은let
을, 변할 여지가 있으면var
를 사용합니다. - 변수 이름은 보통 명사를 사용하며
Bool
타입의 경우 변수 이름은 형용사나 be동사를 사용하는 것이 일반적입니다. - 변수에 초기 값이 할당되어 있으면 Swift는 타입 추론(Type Inference) 기능을 통해 변수의 타입을 명시하지 않아도 타입을 추론할 수 있습니다.
let birthYear: String = "1996" // 상수
var age = 23 // 변수, 타입지정
var height: Double // 변수
let isKorean = true // Bool 타입 변수는 이름으로 형용사나 be동사를 쓰는 것이 일반적
타입 간의 사칙연산을 할 때 결과값의 타입도 동일해야합니다.
맞는 예) String + String = String
, Int * Int = Int
, Double / Double = Double
틀린 예) Double / Int = Double
let birthYear = "1996"
let birthMonth = "Aug"
let birthDay = "15"
let birth = birth = birthMonth + " " + birthDay + " " + birthYear
// birthMonth + birthDay + birthYear = "Aug151996"
// birthMonth + " " + birthDay + " " + birthYear = "Aug 15 1996"
let population = 5000 // 1. 이 값을 Double로 바꿔주거나
let victim = 1.2
let percentage = victim / Double(population) * 100 // 2. 타입 캐스팅을 사용해 Int 값을 Double 타입으 바꿔주거나.
// 맨 마지막의 숫자 100은 따로 선언된 변수, 즉 타입이 지정되 값이 아니기 때문에 연산하는 값과 결과값에 맞게 타입이 Int에서 Double로 바뀐다.
print("The result is \(percentage)") // 값을 문자열로 출력할 때는 큰 따옴표(`"`) 사이에 `\(값)` 형태로 대입하면 된다.
[원소타입]
형태의 타입 형태를 갖는다. 각 원소에는 번호가 나열되는데 이를 index 라고 한다. 프로그래밍에서 index는 0부터 시작한다.
var favorite = ["soccer", "table tennis", "basketball", "swimming"]
favorite.append("baseball") // 원소(여기선 "baseball") 추가하기
print(favorite) // ["soccer", "table tennis", "basketball", "swimming", "baseball"]
print(favorite.count) // 원소의 개수: 5
print(favorite[0]) // 0번 index의 원소: "soccer"
print(favorite[1]) // 1번 index의 원소: "table tennis"
print(favorite[favorite.count - 1]) // 마지막 index (개수 - 1)의 원소: "baseball"
값이 있을 수도, 없을 수도 있음을 표현하는 타입.
var optional: Int = 3
이라는 변수가 선언되었다고 가정하자. 이 변수는 Int
라는 명확한 타입을 갖기 때문에 반드시 값도 Int
이어야만 한다. 때문에 nil
은 optional
에 할당될 수 없다.
이 변수가 nil
값을 할당할 수 있도록 타입을 수정하는 것은 간단하다. 타입 끝에 ?
를 붙여주어 Optional Int
라는 새로운 타입으로 지정해주면 된다.
var optional: Int? = 3
optional = nil
이 optional
값이 3일 때 출력하면 Optional(3)
이라는 출력값이 나온다. 출력값에 Optional
이 붙은 이유는 타입이 Int
가 아니라 Int?
이기 때문이다. 깔끔하 결과값을 위해 타입을 Int
로 되돌리는 방법은 총 3가지가 있다.
!
를 붙여주면 강제로 그 값을 옵셔널이 해지된 타입의 값으로 변경한다. 이는 값이 무조건 존재한다는 확신이 있을 때만 사용해야하며 만약 언래핑하려는 값이 nil
일 경우 심각한 에러를 초래한다.
print(optional!)
if let
구문은 활용하여 값이 있을 경우에 대한 처리를 할 수 있다.
if let notOptional = optional { // optional값이 nil이 아니라면 그걸 notOptional 이라고 할 때(let)
print(notOptional) // notOptional 를 출력
}
guard let ~ else { return }
구문을 활용하여 값이 존재하지 않을 때 빠르게 리턴하고 값이 있는 경우만 관리할 수 있다. guard ~ else { return }
구문은 원하는 조건을 만족하지 못하면 불필요한 행동을 막고 즉각적인 리턴을 한다.
guard let notOptional = optional else { return } // optional이 값이 있다면 그걸 notOptional 이라고 하고 아니면 즉각 리턴한다
print(notOptional) // notOptional 출력
수행하고자 하는 코드들의 집합체
func
(함수 이름)(
파라미터)
{
구현부(실행하고자 하는 코드) }
순으로 함수를 선언합니다.
func moveForward() {
distance = distance + 1
}
// 파라미터(인풋) 이 있는 경우 파라미터는 (파라미터이름): (파라미터타입) 으로 선언
func moveForward(step: Int) {
distance = distance + step
}
func jump() {
moveForward(step:3)
}
반복되는 명령을 수행할 때
for
(각 요소에 대한 인덱스 이름) in
(범위) {
(실행하고자 하는 코드) }
// Before
jump()
jump()
jump()
// After
for i in 1...3 { // i를 쓰지 않을 경우 _ 로 생략해도됨
jump()
}
let sports = ["Football", "Basketball", "Volleyball", "Golf"]
print(sports[0])
print(sports[1])
print(sports[2])
for i in 0...3 { // i = 0, 1, 2, 3
// 반복되는 구문이 여기에
print(sports[i])
}