일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- viewDidLoad
- 플랫디자인
- 직장인자기계발
- 8 그리드 시스템
- 아이폰
- 머티리얼 디자인
- 뉴모피즘
- commit message
- 입력 개수 제한
- iOS앱개발올인원패키지Online.
- 포인트
- Xcodebuild
- viewDidAppear
- commit messages
- .DS_Store
- 패스트캠퍼스후기
- 패캠챌린지
- ios
- SWIFT
- commit
- 디자인 트렌드
- 마크다운
- git workflow
- 픽셀
- 직장인인강
- 패스트캠퍼스
- git
- Git Tutorial
- 뉴북
- 스큐어모피즘
- Today
- Total
왕논의 연구실
패스트캠퍼스 챌린지 12일차(수정) 본문
12일차는 Set와 클로저입니다.
Set는 봉지안에 각각 구분되는 것들을 담은 것과 같습니다. 딕셔너리의 키값만을 모아놓은 것으로 볼 수 있습니다. 그래서 순서가 없고 각각이 유일한 값을 가지고 있습니다.
만약 중복되는 값을 넣어주면 중복된 값을 1개만 남기고 다 없앱니다.
var someArray: Array<Int> = [1, 2, 3, 4] // 1,2,3,4
var someSet: Set<Int> = [1, 2, 3, 1, 2] // 1,2,3
세트도 빈값과 갯수를 알 수 있습니다.
someSet.isEmpty
someSet.count
그리고 값이 포함되었는지 알 수 있습니다.
someSet.contains(4)
someSet.contains(1)
세트에 값을 넣을 때는 append가 아닌 insert를 사용해서 넣어줍니다.
someSet.insert(5)
특정값 삭제시에는 remove로 없애줍니다.
someSet.remove(1)
클로저는 이름없는 함수입니다. 거꾸로 함수는 클로저의 한가지 타입으로 볼 수 있습니다. 클로저의 종류에는 3가지가 있습니다.
-
- Global 함수
- Nested 함수
- Closure Expressions
Function(Global) | Closure |
이름 있다. | 이름 없다. |
Func 키워드 필요 | Func 키워드 필요 없음 |
인자 받을 수 있다. | |
값 리턴 가능 | |
변수로 할당 가능 | |
First Class Type |
First Class Type 이란 변수에 할당할 수 있다, 인자로 받을 수 있다, 리턴 할 수 있다
클로저는 다양한 방법으로 코드를 줄일 수 있습니다. 하지만 지나치게 줄이면 가독성이 줄어들기 때문에 적당한 선에서 줄이는게 좋습니다.
var multiplyClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
return a * b
}
// 파라미터 타입 삭제
var multiplyClosure: (Int, Int) -> Int = { (a, b) -> Int in
return a * b
}
// 괄호 삭제
var multiplyClosure: (Int, Int) -> Int = { a, b in
return a * b
}
// 파라미터 삭제
var multiplyClosure: (Int, Int) -> Int = { return $0 * $1 }
// return 삭제
var multiplyClosure: (Int, Int) -> Int = { $0 * $1 }
일반적인 함수는 바깥쪽 스코프에서 선언된 변수는 안쪽 스코프에서는 사용할 수 있지만, 안쪽에서 선언된 함수는 바깥쪽에서 사용할 수 없다.
{
// 바깥 scope
let numOutside = 3
if true {
// 안쪽 scope
let numInside = 5
print(numOutside, numInside)
}
print(numOutside, numInside) // numInside 접근 불가로 오류
}
그런데 클로저는 안쪽에서 선언된 변수를 사용해서 작성한 경우 바깥쪽에서 사용해도 작동한다. 이를 캡쳐했다고 하는데, capturing Values라고 한다.
if문 안쪽에 name이 선언되었는데, 이를 클로저에서 사용하고 있다. 이 클로저를 if문 바깥에서 사용하면 어떨까? name이 그대로 사용되는데 이는 변수를 캡쳐했기 때문이다.
if true {
let name = "Jason"
printClosure = {
print(name)
}
}
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #iOS앱개발올인원패키지Online.
'강의 > 강의 챌린지(iOS 앱 개발 올인원 패키지 Online)' 카테고리의 다른 글
패스트캠퍼스 챌린지 14일차 (0) | 2021.11.14 |
---|---|
패스트캠퍼스 챌린지 13일차 (0) | 2021.11.13 |
패스트캠퍼스 챌린지 11일차(수정) (0) | 2021.11.11 |
패스트캠퍼스 챌린지 10일차(수정) (0) | 2021.11.10 |
패스트캠퍼스 챌린지 9일차(수정) (0) | 2021.11.09 |