Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 오늘양짱많음
- 샐러드좋아
- 내일의주인공은나야나
- javascript
- ERESOLVE
- 상수와변수
- 정처기
- 커링
- 러닝자바스크립트
- 찐대졸
- GitLab
- 프라모델
- styled-components install error
- node version update
- Git
- 서브웨이
- 노드 버전
- 가죽공예
- 면담끝
- 후록스
- 취미
- 아이행복해
- 자고싶다
- 로스트치킨샐러드
- 너무무서워
- 전복과붕어빵
- 기본데이터타입
- 카드지갑
- useMemo
- 문자열보간법
Archives
- Today
- Total
당근농장
[Swift] 스위프트 기초 2 - Any/AnyObject/nil, 컬렉션 타입(Array/Dictionary/Set) 본문
개발/Swift
[Swift] 스위프트 기초 2 - Any/AnyObject/nil, 컬렉션 타입(Array/Dictionary/Set)
devcarrot 2021. 3. 31. 21:21지난 포스팅에서도 언급했듯이 Swift는 타입에 굉장히 엄격한 언어이다.
그렇다면... 한 변수에 다양한 타입의 값들을 할당하고 싶다면 어떻게 해야할까? 아무 것도 없음을 표현하고 싶다면 어떻게 해야할까?
또한, 언어마다 다양한 컬렉션들도 존재한다.
그럼 그 컬렉션들은 Swift에서 어떤 식으로 사용하고 있을까?
오늘은 크게 이렇게 두 가지의 물음에 답할 예정이다!! Let's go ~~ 🏃
Any/AnyObject/nil
- Any
Swift의모든 타입
을 지칭하는 키워드.
따라서 어떤 타입도 수용 가능하다. (하지만 반대의 경우는 성립하지 않는다 ㅎㅎ;;)
var someAny: Any = 100
someAny = "아무 거나 넣을 수 있음!"
var someInt: Int = 200
someAny = someInt // 문제 없다!
// let someDouble: Double = someAny // 컴파일 에러. Any는 Double 타입이 아니기 때문에 할당 불가능!
- AnyObject
모든 클래스 타입
을 지칭하는 프로토콜.
클래스의 인스턴스만 수용 가능하다.
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
// someAnyObject = 100 // 컴파일 에러. 100은 클래스의 인스턴스가 아니므로 할당할 수 없다.
- nil
없음
을 의미하는 키워드.
다른 언어의NULL, Null, null
등과 유사한 표현이다.
var someAny: Any = 100
// someAny = nil // 컴파일 에러. someAny가 모든 타입을 수용할 수 있더라도 nil은 할당이 불가능하다. 이유는 옵셔널 파트에서!
컬렉션 타입 - Array/Dictionary/Set
- Array
멤버가순서(인덱스)
를 가진 리스트 형태의 컬렉션 타입.
여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양하다.
// 선언 및 생성
var integers: Array<Int> = Array<Int>() // Int 타입만 추가 가능하다. 나는 이 방식을 선호한다. 😊 (이유는 Set 파트에서)
// 위와 동일한 표현
// 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.append(2)
print(integers) // [1, 2]
// 멤버 포함 여부 확인
print(integers.contains(3)) // false
// 멤버 수 확인
print(integers.count) // 2
// 멤버 교체
integers[0] = 3 // 인덱스를 벗어나지 않도록 주의한다.
// 멤버 삭제
integers.remove(at: 0)
integers.removeLast()
integers.removeAll()
// 불변 Array 선언
let immutableArray = [1, 2, 3]
// immutableArray.append(4) // 불가능
- Dictionary
키
와값
의 쌍으로 이루어진 컬렉션 타입.
Array와 비슷하게 여러가지 리터럴 문법을 활용할 수 있어 표현 방법이 다양하다.
// 선언 및 생성
var anyDictionary: Dictionary<String, Any> = [String: Any]() // key가 String 타입이고 Value가 Any인 빈 Dictionary 생성
// 위와 동일한 표현
// var anyDictionary: Dictionary <String, Any> = Dictionary<String, Any>() // 나는 이 방식을 선호한다. 😊 (이유는 Set 파트에서)
// var anyDictionary: Dictionary <String, Any> = [:]
// var anyDictionary: [String: Any] = Dictionary<String, Any>()
// var anyDictionary: [String: Any] = [String: Any]()
// var anyDictionary: [String: Any] = [:]
// var anyDictionary = [String: Any]()
// 키에 해당하는 값 할당
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 // nil 할당 만으로 값이 제거되는 게 신기했다!
print(anyDictionary) // [:]
// 불변 Dictionary 선언
let emptyDictionary: [String: String] = [:]
let initalizedDictionary: [String: String] = ["name": "yagom", "gender": "male"]
// emptyDictionary["key"] = "value" // 당연히 불가능 😤
// "name"이라는 키에 해당하는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없다.
// let someValue: String = initalizedDictionary["name"] // 컴파일 에러. 정확한 이유는 옵셔널과 타입 캐스팅 파트에서!!
- Set
중복되지 않는
멤버가순서없이
존재하는 컬렉션. 따라서 여러 번 동일 값 insert 시에는 한 번만 저장된다.
따라서 멤버의 유일성이 보장되기 때문에집합 연산
에 활용하면 유용하다. (합집합, 교집합, 차집합)
Array, Dictionary와 다르게 축약형이 존재하지 않는다. (Array와 Dictionary를 축약해서 쓰지 않는 이유! 나는 웬만하면 포맷을 동일하게 가져가는 게 좋다.)
// 생성 및 선언
var integerSet: Set<Int> = Set<Int>() // Array, Dictionary와 생성하는 포맷이 비슷하다.
// 새로운 멤버 입력
integerSet.insert(1)
integerSet.insert(2)
integerSet.insert(2)
integerSet.insert(3)
print(integerSet) // {3, 2, 1}
// 멤버 포함 여부 확인
print(integerSet.contains(1)) // true
print(integerSet.contains(100)) // false
// 멤버 삭제
integerSet.remove(2) // {3, 1}
integerSet.removeFirst() // {1}
// 멤버 개수
print(integerSet.count) // 1
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]
출처:
https://www.boostcourse.org/mo122/joinLectures/40659?isDesc=false
iOS 프로그래밍을 위한 스위프트 기초
부스트코스 무료 강의
www.boostcourse.org
'개발 > Swift' 카테고리의 다른 글
[Swift] 스위프트 기초 4 - 조건문, 반복문 (0) | 2021.06.07 |
---|---|
[Swift] 스위프트 기초 3 - 함수 기본, 함수 고급 (0) | 2021.06.01 |
[Swift] 스위프트 기초 1 - 문자열 보간법, 상수와 변수, 기본 데이터 타입 (0) | 2021.03.10 |
Comments