[Daily Swift] 3일차

EunJi·2023년 9월 18일
0

Swift

목록 보기
5/6

For 반복문 활용

for item in myArray where item%2 != 0 {
	print("홀수: \(item)")
}
  • 배열 내에서 where를 활용하여 원하는 요소에 대해서만 활용할 수 있음.

함수

가변 매개변수

func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
	함수 구현
    return -
}
  • 가변 매개변수는 함수당 1개만 가질 수 있음
func sayHelloToFriends(me: String, friends: String...) -> String {
	return "Hello \(friends)! I'm \(me)!"
}

print(sayHelloToFriends(me: "eunji", friends: "hanna", "eric", "wing")
// Hello ["hana", "eric", "wing"]! I'm eunji!

print(sayHelloToFriends(me: "eunji"))
// Hello []! I'm eunji!

Closure

Closure란?

  • 코드의 블럭
  • 일급 시민(first-citizen)
  • 변수, 상수 등으로 저장 가능
  • 전달인자로 전달 가능
  • 함수: 이름이 있는 클로저
    (클로저의 일종임)

정의

# 매개변수가 필요한 경우
{ (매개변수 목록) -> 반환타입 in
	실행코드
}

# 매개변수 필요X 경우
{ () -> 반환타입 ㅑn
	실행코드
}

활용

var sum: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
	return a+b
}

sumResult = sum(1, 2) // 3

함수의 전달인자로서의 클로저

let add: (Int, Int) -> Int
add = { (a: Int, b: Int) -> Int in
	return a + b
}

let substract: (Int, Int) -> Int
substract = { (a: Int, b: Int) -> Int in
	return a - b
}

func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
	return method(a, b)
}
  • method인 add, sbstract를 calculate의 매개변수로 넘겨준 것!
var calculated: Int
calculated = calculate(a: 50, b: 50, method: add)
print(calculated) // 100

후행 클로저

  • 함수의 마지막 인자가 클로저라면,
    마지막 매개변수 이름을 생략하고 함수 소괄호 외부에 클로저 구현 가능.
result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in
	return left + right
}

반환 타입 생략

  • method에서 반환타입을 가지고 있기 때문에 컴파일러는 어떤 타입으로 반환을 해줘야하는지 알고있음.
    따라서, 클로저에서 굳이 반환타입 안 적어줘도 됨.
  • in은 절대 생략 불가
# ver1.
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) in
	return left + right
})

# ver2.
result = calculate(a:10, b: 10) { (left: Int, right: Int) in
	return left + right
}

단축인자 이름

  • 매개변수 이름을 직접 사용하는 것이 아닌
    매개변수의 순서대로 $0, $1...로 표현 가능.
  • in 생략 가능.
result = calculate(a: 10, b: 10, method: {
	return $0 + $1
})

암시적 반환

  • 클로저가 반환값이 있으면,
    return을 굳이 써주지 않아도 마짐가 줄이 암시적으로 반환값임.
# ver1.
result = calculate(a: 10, b: 10) {
	$0 + $1
}

# ver2.
result = calculate(a:10, b: 10) { $0 + $1 }

참고

Closure

profile
말하는 감자

0개의 댓글