명명법
Lower Camel Case : fuction, method, variable, constant
ex.) someVariableName
Upper Camel Case : type(class, struct, enum, extension…)
ex.) Person, Point, Week
콘솔로그 남기기
print 함수 : 단순 문자열 출력
dump 함수 : 인스턴스의 자세한 설명(description 프로퍼티)까지 출력
문자열 보간법 (String Interpolation)
프로그램 실행 중 문자열 내에 변수 또는 상수의 실질적인 값을 표현하기 위해 사용.
\()
let age: Int = 10
print("안녕하세요! 저는 \(age) 살입니다")
//안녕하세요! 저는 10 살입니다
print와 dump차이
class Person{
var name: String = "yagom"
var age: Int = 10
}
let yagom: Person = Person()
print(yagom) //단순 문자열 출력
//main.Person
dump(yagom) //인스턴스의 자세한 설명(description 프로퍼티)까지 출력
/*
main.Person #0
- name: "yagom"
- age: 10
*/
상수 & 변수
상수 선언 키워드 let
변수 선언 키워드 var
//상수의 선언
//let 이름: 타입 = 값
//변수의 선언
//var 이름: 타입 = 값
//나중에 할당할려고 하는 상수나 변수는 타입을 꼭 명시
let sum: Int
let inputA: Int = 100
let inputB: Int = 200
//선언 후 첫 할당
sum = inputA + inputB
sum = 1 // 그 이후에는 다시 값을 바꿀수 없음(오류)
// 변수도 물론 차후에 할당 가능
var nickName: String
nickName = "준서"
기본 데이터 타입
Swift의 기본 데이터 타입
Bool, Int, UInt, Float, Double, Character, String
//Bool
var someBool: Bool = true
someBool = 1 //오류 정수안됨
someBool = false //가능
//UInt 양의 정수
var someUInt: UInt = 100
//Float
var someFloat : Float = 3.14
// Double
var someDouble: Double = 3.14
// Character
var someCharacter: Character = "🇰🇷"
someCharacter = "😄"
someCharacter = "가"
someCharacter = "A"
// String
var someString: String = "하하하 😄 "
someString = someString + "웃으면 복이와요"
print(someString)
Any, AnyObject, nil
Any : Swift의 모든 타입을 지칭하는 키워드
AnyObject : 모든 클래스 타입을 지칭하는 프로토콜
nil : 없음을 의미하는 키워드
//Any
var someAny: Any = 100
someAny = "어떤 타입도 수용 가능합니다"
someAny = 123.12
let someDouble: Double = someAny // 컴파일 오류발생
//다른 타입 교환 안됨
// Any 타입에 Double 자료를 넣어두었더라도 Any는 Double 타입이 아니기 때문에 할당할 수 없습니다.
// 명시적으로 타입을 변환해 주어야 합니다.
//Anyobject
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
someAnyObject = 123.12 // 컴파일 오류발생
// AnyObject는 클래스의 인스턴스만 수용 가능하기 때문에 클래스의 인스턴스가 아니면 할당할 수 없습니다.
var someAny: Any = 100
var someAnyObject: AnyObject = SomeClass()
//nill
// someAny는 Any 타입이고, someAnyObject는 AnyObject 타입이기 때문에 nil을 할당할 수 없습니다.
someAny = nil // 컴파일 오류발생
someAnyObject = nil // 컴파일 오류발생
컬렉션 타입(Array, Dictionary, Set)
Array : 순서가 있는 리스트 컬렉션
Dictionary : '키'와 '값'의 쌍으로 이루어진 컬렉션
Set : 순서가 없고, 멤버가 유일한 컬렉션
Array
멤버가 순서(인덱스)를 가진 리스트 형태의 컬렉션 타입
여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양합니다.
// 1. Array 선언 및 생성
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]()
// 2. Array 활용
integers.append(1) //1이란 멤버 추가
integers.append(100)
// Int 타입이 아니므로 Array에 추가할 수 없습니다
//integers.append(101.1)
print(integers) // [1, 100]
// 멤버 포함 여부 확인
print(integers.contains(100)) // true
print(integers.contains(99)) // false
// 멤버 교체
integers[0] = 99
// 멤버 삭제
integers.remove(at: 0) //0번 원소 삭제
integers.removeLast() //마지막 원소 삭제
integers.removeAll() //모든 원소 삭제
// 멤버 수 확인
print(integers.count)
//count함수 멤버 수 확인
// 인덱스를 벗어나 접근하려면 익셉션 런타임 오류발생
//integers[0] > 비어있는 상태임
//Array<Double>와 [Double]는 동일한 표현
// 빈 Double Array 생성
var doubles: Array<Double> = [Double]()
// 빈 Double Array 생성
var strings: [String] = [String]()
// 빈 Charcter Array 생성
// []는 새로운 빈 Array
var characters: [Character] = []
// 3. 불변 Array: let을 사용하여 Array 선언
let immutableArray = [1, 2, 3]
// 수정이 불가능한 Array이므로 멤버를 추가하거나 삭제할 수 없습니다
//immutableArray.append(4) 오류
//immutableArray.removeAll() 오류
Dictionary
'키'와 '값'의 쌍으로 이루어진 컬렉션 타입
Array와 비슷하게 여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양합니다.
// 2. Dictionary 활용
// 키에 해당하는 값 할당
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100
print(anyDictionary) // ["someKey": "value", "anotherKey": 100]
// 키에 해당하는 값 변경
anyDictionary["someKey"] = "dictionary"
print(anyDictionary) // ["someKey": "dictionary", "anotherKey": 100]
// 키에 해당하는 값 제거
anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil
print(anyDictionary) // 비어있는 Dictionary
// 3. 불변 Dictionary: let을 사용하여 Dictionary 선언
let emptyDictionary: [String: String] = [:] // 빈 Dictionary
let initalizedDictionary: [String: String] = ["name": "yagom", "gender": "male"]
//emptyDictionary["key"] = "value"
// 불변 Dictionary이므로 값 변경 불가
// 키에 해당하는 값을 다른 변수나 상수에 할당하고자 할 때는 옵셔널과 타입 캐스팅 파트에서 다룹니다
// "name"이라는 키에 해당하는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없습니다.
// 컴파일 오류가 발생합니다
// let someValue: String = initalizedDictionary["name"] 오류 Optional:값이 없을 수도 있습니다.
Set
중복되지 않는 멤버가 순서없이 존재하는 컬렉션
Array, Dictionary와 다르게 축약형이 존재하지 않음
// 1. Set 생성 및 선언
var integerSet: Set<Int> = Set<Int>()
// insert : 새로운 멤버 입력
// 동일한 값은 여러번 insert해도 한번만 저장됩니다.
integerSet.insert(1)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(100)
print(intigerSet) // {100, 99, 1}
// contains: 멤버 포함 여부 확인
print(integerSet.contatins(1)) // true
print(integerSet.contains(2)) // false
// remove: 멤버 삭제
integerSet.remove(99) // {100, 1}
integerSet.removeFirst() // {1}
// count: 멤버 개수
integerSet.count // 1
// 2. Set의 활용
// 멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용합니다.
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)
print(union) // [2, 4, 5, 6, 7, 3, 1]
// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]
// 교집합
let intersection: Set<Int> = setA.intersection(setB)
print(intersection) // [5, 3, 4]
// 차집합
let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting) // [2, 1]