Skip to content

Latest commit

 

History

History
executable file
·
98 lines (50 loc) · 4.26 KB

스위프트-3.컬렉션타입.md

File metadata and controls

executable file
·
98 lines (50 loc) · 4.26 KB

[스위프트 대충보기] 3. 컬렉션타입

  • 배열(array)과 딕셔너리(dictionary)라는 두 컬렉션 제공(두개만? 아님! generic collection을 지원함. 배열과 딕셔너리도 역시 그 일부임)

  • 배열: 같은 타입의 원소를 저장하는 순서가 있는(ordered) 컬렉션

  • 딕셔너리: 키(key)와 값(value)의 대응 관계(association)를 순서 없이 저장한 컬렉션. 키는 한 딕셔너리 안에서 유일함.

  • 배열은 NSArray나 NSMutableArray 클래스와 다름(원소 타입이 있다는 점에서)

  • 배열 타입은 Array이라고 쓰나, 짧게 SomeType[]이라고도 쓸 수 있음

  • 배열 리터럴: [원소1,원소2,...] let x = [1,2,3,4,5]

    • 배열 참조: x[0] 0부터 인덱스 시작

    • 원소갯수: x.count

    • 빈 배열여부 확인: x.isEmpty

    • 원소추가: x.append

    • 배열 붙이기: x += [6,7,8]

    • 원소변경: x[0] = 0

    • 원소변경(범위지정): x[0...2] = [10,11] (3개의 원소를 2개로 대치했으므로 길이가 1 줄어듦)

    • 변경이나 범위지정은 기존 인덱스 범위를 넘어서는 부분에 무언가를 넣는 용도로는 사용 불가. 예: x.count가 5인 배열에 x[5] = 10이라고 대입 불가.

    • 원소 삽입: x.insert(0, atIndex: 0)

    • 원소 삭제: x.removeAtIndex(1)

    • 마지막 원소 삭제: x.removeLast

  • 배열 이터레이션: for i in x { ... }

  • 배열 이터레이션(인덱스까지) for (index, value) in enumerate(x) { ... } // global enumerate 함수 사용

  • 배열 생성: var foo = Int

  • 배열을 비우려면, x = [] 라고 해서 비울 수 있음(길이가 0인 배열이 됨. 타입은 그대로)

  • 같은 원소를 반복해 초기화: var threeDoubles = Double[](count: 3, repeatedValue: 0.0)

  • 배열 concatenation : + 사용. arr1 + arr2

  • 딕셔너리 : 역시 NSDictionary, NSMutableDictionary 와 달리 키, 값의 타입을 지정해야만 함

  • 딕셔너리 타입은 Dictionary<KeyType, ValueType>

  • KeyType은 해시가능한 타입이어야 함. 예: 기본타입들(String, Int, Double, Bool), 이넘(enum)...

  • 딕셔너리 리터럴: [ k1: v1, ..., kn: vn]

    • 딕셔너리 원소갯수: x.count

    • 딕셔너리 원소 추가(변경) 1: x[newKey] = newValue

    • 딕셔너리 원소 추가(변경) 2: x.updateValue(newValue, forKey: oldKey) : 옛날 값을 ValueType? 타입(옵션타입임!)으로 반환(즉, 없었다면 null이고, 옛날 값이 있었다면 반환값 뒤에 !를 붙여서 원소를 찾거나 if let v = ... 바인딩으로 원소를 찾아 처리 가능)

    • 딕셔너리 검색: x[keyVal] : 역시 ValueType? 타입임

    • 딕셔너리 원소삭제 1: x[keyVal] = nil

    • 딕셔너리 원소삭제 2: x.removeValueForKey(kevVal) 역시 기존 값을 ValueType? 타입으로 리턴함

  • 이터레이션: for (key, value) in dict { ... }

  • 키만 이터레이션: for key in dict.keys { ... }

  • 값만 이터레이션: for value in dict.values { ... }

  • 키만 배열로 가져오기: Array(dict.keys)

  • 값만 배열로 가져오기: Array(dict.values)

  • 주의: 이터레이션시 순서는 정해져 있지 않음

  • 빈 딕셔너리 생성: Dictionary<Int, String>()

  • 기존 딕셔너리 모든 원소 삭제: namesOfIntegers = [:]

  • 컬렉션의 변경가능성(mutability)

    • var로 배열이나 딕셔너리를 만들면 변경가능 컬렉션이어서 컬렉션의 크기를 변경할 수 있음(즉, 원소를 자유롭게 추가 삭제 가능)

    • let으로 배열이나 딕셔너리를 만들면, 변경불가능 컬렉션이기 때문에, 크기를 변경할 수는 없음(즉, 원소를 추가하거나 삭제할 수 없음)

    • (let으로 선언한) 상수 딕셔너리의 경우에는 원소 업데이트도 금지됨. 즉, dict["key"] = "value" 하면 컴파일 안됨.

    • 배열에서는 원소 삭제나 삽입, 추가는 안되지만, 어떤 인덱스에 해당하는 원소를 바꿔치는 것은 가능. 즉, arr[0] = 10 같은게 가능(물론 arr의 count에 따라 다름)


감상: 뭐.. ^^ 있을게 있음. 별다른 것 없음

다른 언어 쓰던 사용자들도 상당히 쉽게 스위프트 언어 자체는 접근 가능할듯. 물론 코코아를 얼마나 잘 사용할 수 있는가는 또 다른 문제임.