Cavim3x5nunx5dbe30xi
LOGAN
  • 2016.4.9 10:14
  • 조회수 156
  • 답변수 1
Cavim3x5nunx5dbe30xi
LOGAN
  • 2016.4.9 10:14
  • 조회수 156
  • 답변수 1

질문이 있습니다 :)

1) array 에서는 NAME += VALUE 가 가능했는데 dictionary에서 안되는 이유는 무엇인가요?

2) : 콜론은 클레스의 타입을 정의해줄 때 사용하는 연산자(?)인가요?
NAME : INT = 2

3) DICTIONARY를 이용한 클레스의 값을 출력할 때 그 값들의 순서가 임의적으로 정해져서 출력되던데 그 이유는 무엇인가요?

4) 하지만 Set과의 무작위개념과는 다른듯한데 차이점이 궁금합니다.

5) subway2 클레스처럼 문자열을 많이 입력해야할 때 일일이 노가다를 해야하는건지
아니면 일종의 요령이 있는지?

6) DICTIONARY에서 keys와 value값만 출력하고자 할때

let roomNames = String

String을 = 뒤에 붙이셨는데

let roomNames :[String] = (roomCapacites.keys)가 에러나는 이유가 궁금합니다.

7) Int와 int, set과 Set, string과 String이 완전이 다르게 나오는데
첫글자가 소문자로 시작하는 애들은(?) 무엇인가요?

항상 잘듣고있습니다 :)

  • #iOS Swift입문
  • #Collections : Dictionary

1 답변

  • G3rlasealonpd5c2kica
    Demi
    • 2016.4.12 10:44

    1) array 에서는 NAME += VALUE 가 가능했는데 dictionary에서 안되는 이유는 무엇인가요?

    array와는 다르게 dictionary는 += operator를 쓸 수 없습니다.
    dictionary에서 key-value 페어를 추가하려면 dictionary이름[key] = value와 같이 쓰셔야 하며, +=를 꼭 쓰고 싶다면 아래 코드를 추가해서 dictionary 타입에서 +=를 정의해주면 됩니다.

    func += <KeyType, ValueType> (inout left: Dictionary<KeyType, ValueType>, right: Dictionary<KeyType, ValueType>) { 
        for (k, v) in right { 
            left.updateValue(v, forKey: k) 
        } 
    }
    

    playground 상단에 import Swift를 쓰고, Swift를 command+클릭해보세요. Swift가 어떤 타입에서 어떤 연산자를 쓸 수 있는지 나와 있습니다.


    2) : 콜론은 클레스의 타입을 정의해줄 때 사용하는 연산자(?)인가요?

    iOS Developer Library - Types를 보면 변수나 expression의 타입을 명시적으로 지정하는 걸 type annotation이라고 하고, type annotation은 콜론(:)으로 시작해 type으로 끝납니다.

    Swift operator 문서에서 콜론은 operator로 정의하지 않습니다.


    3) DICTIONARY를 이용한 클레스의 값을 출력할 때 그 값들의 순서가 임의적으로 정해져서 출력되던데 그 이유는 무엇인가요?

    iOS Developer Library - Collection Types에 Dictionaries를 보면 "no defined ordering"이라고 명시되어 있습니다.

    dictionary 타입은 순서가 없으므로 출력 순서가 없습니다.


    4) 하지만 Set과의 무작위개념과는 다른듯한데 차이점이 궁금합니다.

    Set과 dictionary는 모두 순서가 없습니다. 같은 페이지의 sets 문서를 보면 dictionary와 같이 "no defined ordering"이라고 되어 있습니다.
    어떤 차이를 말씀하시는지 모르겠네요.... 이 부분에 대해서는 나중에 알게 되면 다시 답변하겠습니다.


    5) subway2 클레스처럼 문자열을 많이 입력해야할 때 일일이 노가다를 해야하는건지

    아니면 일종의 요령이 있는지?

    "시청 을지로입구 을지로3가 ..." 같이 역 이름을 공백으로 구분한 문자열 선언 후, 공백을 기준으로 split하는 방법이 있습니다.


    6) DICTIONARY에서 keys와 value값만 출력하고자 할때

    let roomNames :[String] = (roomCapacites.keys)를 쓰려면 roomCapacites.keys가 String을 저장하는 배열이어야 합니다.

    그런데 dictionary.keys는 dictionary에 있는 key 값들을 배열 형태로 리턴하지 않습니다.
    playground에 roomCapacites.keys만 입력해보세요. 오른쪽에 LazyMapCollection<Dictionary<String, Int>, String>라고 출력될 겁니다.
    이걸 배열 형태로 바꾸려면

    1. Array(mydict.keys)로 형 변환을 하던가
    2. [String](roomCapacites.keys)과같이 array의 생성자에게 전달해 줘야 합니다.

    강의에서는 2번째 방법을 썼습니다.


    7) Int와 int, set과 Set, string과 String이 완전이 다르게 나오는데

    타입이름은 무조건 대문자로 시작해야 합니다.
    playground에서 int와 같이 타입 이름을 소문자로 쓰는 경우, 당장은 에러가 뜨지 않지만
    다음 줄로 넘어가면 에러가 발생합니다.

    다음 코드를 써보세요

    var myint1 : int = 3
    var myInt2 : Int = 3
    

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.