IOS/Swift

[TIL] Swift. Collection

Swift는 많은 함수를 관리할수 있게 Collection이라는 기능이 있습니다

  1. Array

  • 순서에 따라 담을 수있는 상자라고 생각할 수 있다
  • 담을 때에는 같은 타입의 데이터를 담아야 한다.
    • 순서가 있는 아이템
    • 아이템의 순서를 알면 유용할때
      • ex)) 신작영화의 랭크
  • 가장 많이 쓰이는 배열 메서드
    • isEmpty : 비엇는지 판별
    • count : 몇개의 인덱스가 있는지
    • array[Int] : 해당 데이터에 접근하는 방법
    • for in 구문 : 배열안의 key와 value를 순서대로 받아올수 있는 방법

  2. Dictionary

  • 데이터를 담는 종류
  • 배열과는 다르게 순서가 없습니다.
  • 키는 유일한 값으로 정해야한다.
  • 값을 의미단위로 찾을때 유용하다
  • 키를 이용해서 값을 호출
  • for문을 이용할 때에도 순서가 일정하게 나온다는 보장이 없습니다
// 이름, 직업, 도시 에 대해서 본인의 딕셔너리 만들기
// 여기서 도시를 부산으로 업데이트 하기
// 딕셔너리를 받아서 이름과 도시 프린트하는 함수 만들기  이거는 한번에 못했어요 ... 

var hyeongyuInfo: [String : String] = ["name": "Hyeongyu IM", "job": "NONE" , "city": "Seoul"]

hyeongyuInfo

hyeongyuInfo["city"] = "busan"
hyeongyuInfo

func printNameAndCity(dic: [String: String]) {
    if let name = dic["name"], let city = dic["city"] {
        print(name, city)
    } else {
        "cannot find"
    }
}

printNameAndCity(dic: hyeongyuInfo)

  3. Set

  • Set는 순서가 없다
  • 값만 들어있는 상자.
  • 중복이 없는 유니크 한 아이템들을 관리할 때
  • 순서가 중요하지 않을 때
var someSet: Set<Int> = [1, 2, 3, 1]
// 중복되는 값을 넣어도 출력되는 값은 {1, 2, 3} 으로 출력된다
// []대괄호로 넣어도 저런 괄호가 나오게 되는구나... 주의

  4. Closure

  • 이름이 없는 매서드라고 생각할수있다( = 이름이 없는 함수)
  • 안쪽 Scope는 바깥쪽 Scope를 참조할수 있지만 바깥 Scope는 안쪽을 참조할수 없다.
  • Scope안쪽에서 생성된 함수가 바깥쪽의 변수를 참조 할 수 있고, 만약 안쪽에서 생성된 함수가 Scope 밖에서 사용될 경우 안쪽에서 참조 되었던 변수를 바깥에서도 참조 할 수 있다
  • 아주 정확히는 함수는 Closure의 한가지 타입
  • Closure의 3가지 타입
    • Global 함수
    • Nested 함수
    • closure expressions
  • 함수는 func가 필요하지만 클로저는 func키워드가 필요없다
  • 함수와 클로저는 First Class Type이다
    • First Class Type이란
      • 변수에 할당할 수 이다
      • 인자로 받을수 있다
      • 리턴 할 수 있다
  • 자주 쓰이는 Closure의 형태
    • Completion Block
      • 어떤 테스크가 완료 되었을 때 클로저가 실행
      • 예를 들어 데이터 로딩이 끝나고 클로저를 실행하고 싶은 경우
    • Higher Order Functions
      • =인풋으로 함수를 받을수 있는 유형의 함수 = 고계함수

  4 - 1 Closure Syntax

// Trailing Closure

func somesimpleFunction(message: String, simpleClosure: () -> Void) {
    print("함수에서 호출이 되었어요, 메세지는 \(message)")
    simpleClosure()
}

somesimpleFunction(message: "로나로나 메로나, 코로나 극혐", simpleClosure: {
    print("헬로 코로나 from Closure")
})

somesimpleFunction(message: "로나로나 메로나, 코로나 극혐") {
    print("헬로 코로나 from Closure")
}


두번째 코드와 세번째 코드는 동일하게 작동한다 3번째를 추천한다.
마지막 함수실행의 파라미터에 함수이름이 없어도 그냥 실행이되네... 신기하다

'IOS > Swift' 카테고리의 다른 글

[TIL] Swift. Structure(Class, Struct, Enum)  (0) 2020.09.30
[TIL] Swift. Function Expression  (0) 2020.09.29
[TIL] Swift. Optional  (0) 2020.09.24
[TIL]Swift. Function  (0) 2020.09.23
[TIL] Swift. Flow Control  (0) 2020.09.22