Swift의 기초적인 자료형으로는 Int, Double, Float, Bool, String, Array, Set, Dictionary가 있다. 다른 보통의 언어와 같이 값을 저장하고 참조하기 위해 변수를 사용하고 이름으로 구분한다.
Symple Types
Variable and Constants
swift는 javascript와 비슷하게 변수와 상수를 제공한다. 변수 및 상수의 Type(형식)은 초기화 과정에서 설정할 수 있다.
var n = 100 // 변수 : 한 번 정의되어도 변경될 수 있음
let m = 100 // 상수 : 한 번 정의되면 절대로 변경될 수 없음
var x = 0.0, y = 0.1, z = 0.2 // 한 줄 정의
Type Annotations
변수나 상수를 선언할 때 타입을 지정할 수 있다. 변수나 상수를 선언할 때 명확하기 위해 사용된다.
var name : String
var age : Int
var weight : Float
var a : String = "WONILLISM"
파이썬의 print와 유사하다.
terminator(종결자)의 초기값은 줄바꿈이어서 별도의 줄바꿈 문자 없이 출력시 자동으로 줄바꿈이된다.
만약 줄바꿈대신 종결자를 바꾸고 싶다면 terminator값을 바꾸어 주면 된다.
var name : String = "WONIL"
print(name)
print(name, terminator: "")
문자열에 상수나 변수값을 추가하여 출력하고 싶다면 문자열 보간을 이용하면 된다.
var name : String = "WONIL"
print("Hello \(name)!")
Multi-line Strings
swift는 여러줄 문자열도 변수로 지정할 수 있다.
var str1 = """
This goes
over multiple
lines
"""
Complex Types
Array
swift에도 다른 언어들과 같이 배열이 존재한다.
접근 방식도 다른 언어들과 같다 만약 첫번째 요소에 접근하고 싶으면 Array[0]
으로 접근할 수 있다.
만약 존재하지않은 요소에 접근하면 swift는 충돌을 일으킨다.
let john = "John Lennon"
let paul = "Paul McCartney"
let george = "George Harrison"
let ringo = "Ringo Starr"
let beatles = [john, paul, george, ringo]
Sets
집합은 다음과 같은 두 가지 차이점을 제외하면 배열과 같은 어떠한 값의 모음이다.
- 요소들은 순서가 없는 형태로 저장된다. 실제로는 임의의 순서로 저장된다.
- 한 세트에 중복된 요소가 들어갈 수 없다. 만약 중복된 항목을 넣는다면, 그 값은 알아서 무시된다.
let colors = Set(["red", "green", "blue"])
Tuples
튜플은 여러개의 값을 하나의 복합값으로 그룹화하는 것을 말한다. 튜플 내의 값은 모든 자료형이 가능하다.
var http404error = (404, "Not Found")
var statusCode, statusMessage) = http404error
새로운 튜플을 만들 때 각자의 값에 이름을 붙여주고싶으면 (key : value) 처럼 사용할 수 있다.
접근하는 방법은 두 가지 방법이 있다.
var name = (first: "Taylor", last: "Swift")
name.0
name.first
var http404error = (statusCode : 404, statusMessage : "Not Found")
print("status code = \(http404error.statusCode)")
print("status message = \(http404error.statusMessage)")
Dictionary
딕셔너리는 배열과 마찬가지로 값의 모음이지만 정수 위치로 항목을 저장하는 대신 원하는 변수로 저장할 수 있다.[key : value]
튜플과의 차이는 튜플은 키값 없이 저장될 수 있지만, 딕셔너리는 그렇지않다.
튜플은 단지 한 쌍의 저장방식일 뿐이지만, 딕셔너리는 저장방식 자체가 다르다.
예를들면,
var s = ("name": "wonil")
s.name
var d = ["name": "wonil"]
d["name"]
즉, 튜플은 어떠한 값들을 그룹화하여(c언어의 구조체?) 전달하기 위한 방식이고, 딕셔너리는 [key : value]
를 위한 변수이다.
딕셔너리는 존재하지 않는 값을 참조하면 nil
을 반환한다, 만약 다른 값을 반환하고 싶다면 아래와 같이 선언할 수 있다.d["name", default: "unknown"]
Creating Empty Collections
// array
var results = [Int]()
var results = Array<Int>()
// set
var words = Set<String>()
var numbers = Set<Int>()
var teams = [String: String]()
var scores = Dictionary<String, Int>()
Enumerations
일반적으로 열거형은 그룹화 된 관련 값들을 쉽게 정의하는 방법이다.
enum CompassPoint {
case north
case south
case east
case west
}
enum 타입의 변수를 선언할 때, 이미 타입을 지정한 경우는 타입을 생략하여도 가능하다.
var goSouth: CompassPoint = CompassPoint.south
var goEast: CompassPoint = .east
Enum initialize raw value
enum은 원시값(raw value)을 이용하여 초기화도 가능하다.
enum CompassPoint: Int {
case north = 1 // 첫 번째 값에 1이 대입되어 밑은 2, 3, 4 로 대입된다
case south
case east
case west
}
각각 다른 값으로 초기화 하고싶다면, 각각 초기화 하면 된다.