변수 variable 은 변경 가능한 값, 상수 constant는 변경할 수 없습니다.
Swift 에서는 변수와 상수를 각각 var 와 let 키워드를 사용해서 선언합니다.
var a = 0
let b = 1
a = 10
b = 1 // error
b는 상수이므로 변경할 수 없는 값 입니다.
Swift 는 "정적 타이핑 언어" 입니다.
정적 타이핑 언어란 변수나 상수를 정의할 때 자료형 타입을 명시해줘야 하는 언어를 뜻 합니다.
var a : Int = 1
let name : String = "eun jae"
var isMale : Boolean = true
이렇게 보니 코틀린과 유사한 것 같네요
: String ,: Int 와 같은 것들을 타입 어노테이션 type annotation 이라고 한답니다.
Swift 에서는 자료형 타입을 굉장히 엄격하게 구분하기 때문에 다른 자료형 끼리는 연산조차 되지 않습니다.
var a : Int = 1
var b : Float = 1.2
print(a+b)
Int 타입인 a 와 Float 타입인 b와 +연산을 할 경우 Swift 에서는 컴파일 에러가 발생합니다.
다른 프로그래밍 언어일 경우에는 허용되는 경우가 많은데 Kotlin의 경우에도 그렇습니다.
하지만, Swift 에서는 자료형을 엄격하게 구분하기 때문에 연산시 자료형에 주의해야 합니다.
print(Float(a)+b)
다음과 같이 a를 Float 으로 타입 캐스팅을 한 후 연산을 함으로써 문제를 해결 할 수 있습니다.
var a : Int = 1
var b : Float = 1.2
print("a는 " + String(a) + " b는 " + String(b))
응용하면, 이렇게 숫자를 문자열로 사용할 수 있습니다 .
print("a는 \(a) b는 \(b)")
Swift에서는 이렇게도 쓸 수 있습니다.
Kotlin 에서는 ${값} 으로 표현했었는데 Swift에서는 이렇게 쓰이는군요..
Swift는 Kotlin과 마찬가지로 타입 추론이 가능합니다.
var lastName: String = "Lee"
var firstName = "eun jae"
변수 lastName 과 firstName 은 둘 다 String 타입 입니다.
Swift 컴파일러가 ""의 텍스트로 정의된 변수를 보고, 아! 이 변수는 String 타입이구나! 하고 타입 추론을 하게 됩니다. 마찬가지로 숫자는 Int 로 타입 추론을 하게 되겠죠.
Java 와는 다르게 타입추론도 할 줄 알고,,, 꽤 똑똑한 것 같습니다... ㅋㅋㅋ
배열과 딕셔너리는 모두 대괄호 [ ] 로 정의할 수 있습니다.
var arr = ["apple", "mango", "water melon", "peach"]
var dict = ["apple" : "red", "banana": "yellow", "grape": "green", "peach": "pink"]
print(arr[1])
print(dict["apple"])
배열에 접근할 때는 [index] 딕셔너리는 [key] 로 접근 가능합니다.
여기서 arr의 자료형 타입은 [String] dict 의 자료형 타입은 [String : String] 입니다. 하지만, 우리 똑똑한 Swift는 타입 추론이 가능하기 때문에 생략할 수 있습니다.
근데 여기서 딕셔너리 값을 출력해보면 "Optional" 이라는게 출력됩니다 옵셔널에 대해서는 다음에 다뤄보도록 하겠습니다.
만약, 빈 배열이나 빈 딕셔너리를 선언하고 싶다면 다음과 같이 작성하면 됩니다.
var arr : [String] = []
var dict : [String: String] = [:]
좀 더 간결하게 한다면?
var arr = [String]()
var dict = [String: String]()