직장인이 되고 iOS를 개발하게 되었다. iOS 개발 경험이 조금 있긴하지만, 소프트 랜딩 시간을 통해 기초부터 차근차근 정리해보려한다.
스위프트는 함수형 프로그래밍의 패러다임을 채용한 언어이므로 불변 객체를 굉장히 중요시 한다.
// 상수의 선언
let 이름 : 타입 = 값
// 변수의 선언
var 이름 : 타입 = 값
값의 타입이 명확하면 타입 생략 가능하지만, 나중에 값을 넣어줄 때는 타입을 꼭 명시해주어야 한다.
// 타입 생략
let integer = 1
var strings = "hello"
// 값을 나중에 할당
let name : String
let age : Int
// 값 할당
name = "ssionii"
age = 24
스위프트는 데이터 타입에 엄격한 언어이다. 따라서 서로 다른 데이터 타입 간의 자료 교환이 굉장히 까다롭다.
true와 false만 값으로 가진다.
var someBool : Bool = false
someBool = true
someBool = 1 // 컴파일 오류
Int: 정수 타입. 64비트 정수형
UInt: 양의 정수 타입. 64비트 양의 정수형
var someInt : Int = 100
var someUInt : UInt = 100
someUInt = -100 // 컴파일 오류
Float: 실수 타입. 32비트 부동소수형
Double: 실수 타입. 64비트 부동소수형
var someFloat = 3.14
someFloat = 3
var someDouble = 3.14
someDouble = 3
someDouble = someFloat // 컴파일 오류
Character: 문자 타입. 유니코드 사용. 큰따옴표("") 사용
String: 문자열 타입. 유니코드 사용. 큰따옴표("") 사용
var someCharacter : Character = "가"
someCharacter = "a"
someCharacter = "hello" // 컴파일 오류
var someString : String = "hello"
someString = someString + "월드"
someString = someCharacter // 컴파일 오류
스위프트의 모든 타입을 지칭하는 키워드
var someAny : Any = 100
someAny = "아무거나 넣을 수 있다"
someAny = 123.12
// 마지막에 Double 타입의 값을 넣었더라도 Any는 Double이 아니기 때문에 할당 x
// 명시적인 데이터 타입 변환 필요
let someDouble = someAny // 컴파일 에러
모든 클래스 타입을 지칭하는 프로토콜
class SomeClass{}
var someAnyObject : AnyObject = SomeClass()
// AnyObject는 클래스의 인스턴스만 수용 가능
someAnyObject = 123.12 // 컴파일 에러
스위프트에서 '없음'을 의미하는 키워드
var someAny : Any
var someAnyObject : AnyObject
someAny = nil // 컴파일 오류
someAnyObject = nil // 컴파일 오류
멤버가 순서(인덱스)를 가진 리스트 형태의 컬렉션 타입. 여러가지 리터럴 문법을 활용할 수 있다.
var integers: Array<Int> = Array<Int>()
// 위와 동일한 표현
var integers : Array<Int> = [Int]()
var integers : Array<Int> = []
var integers : [Int] = Array<Int>()
var integers : [Int] = [Int]()
var integers : [Int] = []
var integers = [Int]()
// 멤버 삽입
integers.append(1)
integers.appned(2)
integers.appned(3)
integers.append(123.12) // 오류
// 멤버 포함 여부 확인
integers.contains(1) // true
integers.contains(4) // false
// 멤버 교체
integers[0] = 100
// 멤버 삭제
integers.remove(at:0) // 100 삭제
integers.removeLast() // 2 삭제
integers.removeAll() // 모두 삭제
// 멤버 수
print(integers.count) // 0
'키'와 '값'의 쌍으로 이루어진 컬렉션 타입. Array와 같이 여러가지 리터럴 문법을 활용할 수 있다.
var anyDictionary : Dictionary<String, Any> = [String : Any]()
// 위와 동일한 표현
var anyDictionary : Dictionary<String, Any> = Dictionary<String, Any>()
var anyDictionary : Dictionary<String, Any> = [:]
var anyDictionary : [String : Any] = Dictionary<String, Any>()
var anyDictionary : [String : Any] = [String : Any]()
var anyDictionary = [String : Any]()
// 키에 해당하는 값 할당
anyDictionary["someKey"] = "someValue"
anyDictionary["anotherKey"] = 100
// 위와 동일한 표현
anyDictionary = ["someKey" : "someValue", "anotherKey" : 100]
// 키에 해당하는 값 변경
anyDictionary["someKey"] = "dictionary"
// 키에 해당하는 값 제거
anyDictionary.removeValue(forKey:"anotherKey")
anyDictionary["someKey"] = nil
중복되지 않는 멤버가 순서 없이 존재하는 컬렉션. Array, Dictionary와 달리 축약형이 없다.
var integerSet : Set<Int> = Set<Int>()
// 멤버 추가
integerSet.insert(1)
integerSet.insert(2)
integerSet.insert(99)
integerSet.insert(3)
integerSet.insert(99) // 반영 x
// 멤버 포함 여부 확인
integerSet.contains(1) // true
integerSet.contains(100) // false
// 멤버 삭제
integerSet.remove(1) // {2, 3, 99}
integerSet.removeFirst() // {3, 99}
// 멤버 수
print(integerSet.count) // 2
멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용하다.
let setA : Set<Int> = [1, 2, 3, 4, 5]
let setB : Set<Int> = [3, 4, 5, 6, 7]
// 합집합
let union : Set<Int> = setA.union(setB)
// 오름차순 정렬
let orderedUnion : [Int] = union.sorted()
// 교집합
let intersection : Set<Int> = setA.intersection(setB)
// 차집합
let subtracting : Set<Int> = setA.subtracting(setB)
해당 글은 boostcourse의 'iOS 프로그래밍을 위한 스위프트 기초' 강의를 수강한 후 정리한 글입니다.