// 이름, 직업, 도시 에 대해서 본인의 딕셔너리 만들기
// 여기서 도시를 부산으로 업데이트 하기
// 딕셔너리를 받아서 이름과 도시 프린트하는 함수 만들기 이거는 한번에 못했어요 ...
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번째를 추천한다.
마지막 함수실행의 파라미터에 함수이름이 없어도 그냥 실행이되네... 신기하다