보초의 코딩일기장

[swift 입문] Any, AnyObject, nil, 컬렉션타입 본문

낙서장/edwith : swift 입문

[swift 입문] Any, AnyObject, nil, 컬렉션타입

장보비 2018. 6. 27. 20:03

Any - Swift 의 모든 타입을 지칭하는 키워드

AnyObject - 모든 클래스 타입을 지칭하는 프로토콜

nil - '없음'을 의미하는 키워드 , NULL 과 유사한 표현


1
2
3
4
var someAny: Any = 100
someAny = "하이"
someAny = 123.12
//어떤 타입도 수용이 가능하다.
cs


Any는 데이터 타입 위치에 들어갈 수 있다.

모든 타입을 수용할 수 있다는 의미가 들어있다.


1
let someDouble: Double = someAny

cs

하지만 Any타입에 Double형을 넣을 수는 없으므로 오류가 나타난다.


1
2
3
class SomeClass {}
 
var someAnyObject: AnyObject = SomeClass()
cs

두번째로 클래스를 하나 생성 한다.


1
someAnyObject = 123.12
cs

후에 클래스 변수에 Double형 변수를 넣는 것도 불가능하다.


1
someAny=nil
cs

Any type인 someAny 변수에 nil을 넣어보겠다.

Any는 어떤 변수도 들어갈 수 있다고 배웠다.

하지만 nil은 빈 값이므로 Any에 들어갈 수 없으므로 오류가 발생하게 된다.

컬렉션타입

Array - 순서가 있는 리스트 컬렉션

Dictionary - 키와 값의 쌍으로 이루어진 컬렉션

Set - 순서가 없고 멤버가 유일한 컬렉션


1.Array

멤버가 순서를 가진 리스트 형태의 컬렉션 타입

표현 방법이 다양하다.

1
var integers: Array<Int> = Array<Int>()
cs

1
var doubles: Array<Double> = [Double]()
cs

1
var strings: [String= [String]()
cs

1
var characters: [Character] = []

cs


1
2
//변경이 불가능한 배열 선언
let immutableArray = [1,2,3]
cs


integers 라는 Array에 정수를 추가해줄 때 쓰는 표현

1
2
integers.append(1)// [1]
integers.append(100)// [1,100]
cs


integers 라는 Array에 해당 정수가 존재유무를 판단할때 쓰는 표현

값이 들어있다면 true, 들어있지 않다면 false로 출력된다.

1
2
integers.contains(100//true
integers.contains(99//false
cs

1. index에 해당하는 값을 없애고 싶을 때 쓰는 표현

2. 맨 마지막 요소를 없애고 싶을 때 쓰는 표현

3. 모든 요소를 없애고 싶을 때 쓰는 표현

4. 몇개의 요소가 들어 있는지 알고싶을 때 쓰는 표현

5. 0번째 index에 접근하고자 할때 쓰는 표현

1
2
3
4
5
integers.remove(at:0//1
integers.removeLast() //2
integers.removeAll() //3
integers.count //4
integers[0//5
cs


2.Dictionary

키와 쌍으로 이루어진 컬렉션 타입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//key가 string 타입이고 value가 and인 빈 Dictionary 생성 
//순서 상관없이 키와 값의 쌍으로 이루어져 있다.
var anyDictionary: Dictionary<String, Any> = [String:Any]()
anyDictionary["someKey"= "value"
anyDictionary["anotherKey"= 100
 
anyDictionary //출력: ["someKey": "value", "anotherKey": 100] //키와 값의 쌍
 
//불변의 Dictionary값을 선언해주어으므로 값을 변경하지 못한다.
let emptyDictionary: [StringString= [:]
let initalizedDictionary: [StringString= ["name""yagom""gender""male"]
 
// "name"이라는 키에 해당하는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없다.
//그러므로 컴파일 오류가 발생한다.
let someValue: String = initalizedDictionary["name"]
cs


3.Set

중복되지 않는 멤버가 순서없이 존재하는 컬렉션

Array, Dictionary와는 다르게 축약형이 존재하지 않는다.

1
var integerSet: Set<Int> = Set<Int>()
cs


1
2
3
4
5
6
7
integerSet.insert(1)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(100)
 
print(integerSet) // {100, 99, 1}
cs

insert시 해당 값을 integerSet 에 넣는다.

print시 중복되는 값인 99는 한 번만 들어가서 100,99,1 이 들어가게 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용하다.
let setA: Set<Int> = [12345]
let setB: Set<Int> = [34567]
 
// 합집합
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]
cs


Buy me a coffeeBuy me a coffee
Comments