타입 Bool, Int, UInt, Float, Double, Character, String
선언키워드(변수/상수) 변수명 : TYPE = value
//선언 키워드
let // 상수
var // 변수
var 변수 : Int = 1;
변수= 2 // 에러 : 등호 좌우의 간격이 다르다. 붙이려면 다 붙여라
변수 = 3;
// var 키워드는 값을 바꿀 수 있다.
let 상수 : Int = 2;
상수 = 3 // 에러 : 이미 할당된 값에 다른 값을 넣을 수 없다.
let inputA: Int = 100;
let inputB: Int;
print(inputA)
// 선언만 하고 할당한 값이 없이 사용하게 되면 컴파일 에러가 발생한다.
print(inputB)
let inputA = 100;
print(inputA)
// 타입 없이 가능하다.
// 그러나 다른 타입의 값을 추가할 경우 에러가 발생한다.
var someInt : Int = -100;
someInt = 100.1 // 에러 : Int(64비트 정수형)에는 Double(실수)를 넣을 수 없다.
var nickName: String
// 위와 같이 선언만 하는 것도 가능하다.
print(nickName)
// 단, 선언만 하고 값을 출력하는 경우 컴파일 에러가 발생한다.
var someBool: Bool = true;
someBool = false;
someBool = 1 // 에러 : 타입이 Bool 인데 Int 추가하지 마라
someBool = 0 // 에러 : 타입이 Bool 인데 Int 추가하지 마라
var someUInt: UInt = 100
someUInt = -100 // 에러 : 부호가 없는 UInt에는 Int타입의 값을 할당할수 없다!
someUInt = someInt // 에러 : 값은 가능할지 모르지만 타입이 다르기때문에 할당 불가!!
var someDouble: Float = 3.14;
someDouble = 3; // 실수에 소수가 포함되기 때문에 가능
var someDouble: Double = 3.14
someDouble = 3 // 실수에 소수가 포함되기 때문에 가능
someDouble = someFloat // 에러 값은 넣을수 있으나, 타입이 다르기 때문에 불가능
큰따옴표("")를 사용해야 한다. 작은따옴표('') 혹은 백틱(``)은 사용할수 없다.
var someCharacter : Character = "😀"
someCharacter = "🚙"
someCharacter = "가"
someCharacter = "A"
// 큰따옴포 안에 유니코드로 되어 있는 한개의 문자는 모두 가능함
someCharacter = "aa" // 에러 : String 타입은 Character에 할당할수 없다.
큰따옴표("")를 사용해야 한다. 작은따옴표('') 혹은 백틱(``)은 사용할수 없다.
var someString : String = "hello"
someString = "hello"
someString = "world"
someString = "" // 빈 값도 넣을수 있다.
someString = "Hello" + someString // " + " 연산자로 문자열을 추가할수 있다.
someString = someCharacter // 에러 : 타입이 다르기 때문에 불가능
Any : Swift의 모든 타입을 지칭하는 키워드
AnyObject : 모든 클래스 타입을 지칭하는 프로토콜
nil - 없음을 의미하는 키워드
var someAny : Any = 100;
someAny = "어떤타입도 수용 가능합니다"
someAny = "123.12
var someDouble : Double = someAny // 에러 : Any 도 타입이기 때문에 Double 타입 변수에 할당할수 없다.
클래스의 인스턴스만 넣을수 있다.
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
someAnyObject = 123.123 // 에러 : AnyObject 에는 Double의 타입을 넣을수 없다.
var someAny : Any = 123
someAny = nil // 에러 : Any 타입은 어떤 값이든 들어 올수 있으나 빈 값은 들어 올수 없다.
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
someAnyObject = nil // 에러 !!
Array - 순서가 있는 리스트 컬렉션
Dictionary - 키와 값의 쌍으로 이루어진 컬렉션
Set - 순서가 없고 멤버가 유일한 컬렉션 (중복없음)
// 빈 Int Array 생성
var intergers : Array<Int> = Array<Int>() // []
/*
Array<Int> : 배열이고 안에 들어가는 요소의 타입은 Int 이다.
Array<Int>() : 요소가 Int인 빈 배열을 생성한다.
*/
integers.append(1) // [1]
integers.append(100) // [1, 100]
integers.append(100.1) // 에러 : 100.1은 Int 타입이 아니다.
integers.contains(100) // true 요소중에 100을 가지고 있는가?
integers.contains(99) // false 요소중에 99 를 가지고 있는가?
integers.remove(at:0) // 0번 인덱스 값을 삭제해 달라.
integers.removeLast() // 마지막 인덱스 값을 삭제해 달라
integers.removeAll() // 모든 값을 삭제해 달라.
integers.count // 요소의 길이를 반환한다.
integers[0] // integers 배열의 0 번째 인덱스
integers[1] // integers 배열의 1 번째 인덱스
var Doubles : Array<Double> = [Double]() // []
var Strings : [String] = [String]() // []
var characters : [Character] = [] // []
let immutableArray = [1,2,3] // [1,2,3]
/*
class hello {
var a:String = "b"
}
var arr:[AnyObject] = []
arr.append(hello())
dump(arr)
hello 클래스를 생성하고, arr 인스턴스가 요소인 빈 배열을 생성하고, 인스턴스를 추가할수 있다.
arr[0] // "b" 가 출력 된다.
*/
var anyDictionary : Dictionary<String ,Any> = [String:Any]() // [:]
anyDictionary["someKey"] = "value" //value
anyDictionary["anotherKey"] = 100 // 100
anyDictionary // ["someKey" : "value" , "anotherKey":100]
anyDictionary["someKey"] = "dictionary" // dictionary
anyDictionary // ["someKey" : "dictionary" , "anotherKey":100]
let emptyDictionary : [String:String] = [:]
let initalizedDictionary :[String:String] = ["name":"yagom","gender":"male"]
emptyDictionary["key"] = "value" // let 키워드 선언이기때문에 값을 변경 할수 없다.
let someValue : String = initalizedDictionary["name"] // 에러 : name에 해당하는 값이 있을 수도 있고 없을 수도 있기 때문에 에러가 난다.
중복되지 않는 컬렉션
var integerSet: Set<Int> = Set<Int>()
integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
integerSet
integerSet.contains(1)
integerSet.contains(2)
integerSet.remove(100)
integerSet.removeFirst()
integerSet.count
let setA: Set<Int> = [1,2,3,4,5] // {5,2,3,1,4}
let setB: Set<Int> = [3,4,5,6,7] // {5,6,7,3,4}
let union: Set<Int> = setA.union(setB) // {2,4,5,6,7,3,1}
let sortedUnion:[Int] = union.sorted() // [1,2,3,4,4,5,6,7]
let intersection: Set<Int> = setA.intersection(setB) // {5,4,3} 교집합
let subtracting: Set<Int> = setA.subtracting(setB) // {2,1} 차집함 setA-SetB
출처 : 유튜브 "yagom"