728x90
반응형
함수
- 함수는 func 키워드를 사용해서 선언합니다
- () 안에 인자를 받을 수 있게 만들 수 있습니다
- 반환되는 값이 있는 경우, -> 을 이용해서 반환 타입을 선언합니다.
func printGugu(dan: Int) {
for i in 1...9 {
print("\(dan) * \(i) = \(dan * i)")
}
}
printGugu(dan: 5)
// printGugu(5) // 인자는 반드시 특정해야 함
// 5 * 1 = 5
// 5 * 2 = 10
// 5 * 3 = 15
// 5 * 4 = 20
// 5 * 5 = 25
// 5 * 6 = 30
// 5 * 7 = 35
// 5 * 8 = 40
// 5 * 9 = 45
func rollDice() -> Int {
return Int.random(in: 1...6)
}
let random = rollDice()
클로져
- 클로저는 이름이 존재하지 않는 함수라고 생각하면 편합니다
- 클로저는 함수와 마찬가지로 Variable 이나 Constant 에 할당할 수 있습니다
// 함수
func call(name: String) {
print("hello, \(name)")
}
call(name: "Jason") // 직접 정의한 함수는 인자명 명시
// hello, Jason
// 상수에 함수 할당하고, 해당 상수를 호출 해보기
let callName = call
callName("Aha") // 상수에 할당한 함수는 인자명 명시 불가
// hello, Aha
// 상수에 클로저 할당하고, 해당 상수 호출 해보기
let helloName = { (name: String) in
print("hello, \(name)")
}
helloName("Oho") // 클로저도 인자명 명시 불가
// hello, Oho
- 클로저 형식은 함수와 거의 동일합니다.
- in 을 통해서 파라미터 및 반환 타입과 실제 클로저 코드를 분리합니다
// 클로져 형태
{ (name: String) -> Bool in
// some code
}
- 클로저는 배열과 딕셔너리 같은 컬렉션 타입과 함께
filter, map, reduce 메소드 사용 시 자주 활용됩니다
// filter
let members = ["Jason", "Greg", "Tiffany"]
let nameHasT = members.filter { name in
return name.hasPrefix("T")
}
print(nameHasT)
// ["Tiffany"]
// map
let prices = [1000, 2000, 3000]
let doubledPrices = prices.map { price in
return price * 2
}
print(doubledPrices)
// [2000, 4000, 6000]
// reduce // 요약의 의미 // 아래 코드는 for문과 동일하게 동작한다
let revenues = [100, 200, 300]
// 배열(딕셔너리).reduce(초기값){ 초기(반환)값, 배열(딕셔너리)의 다음값
let totalRevenue = revenues.reduce(0) { partialResult, next in
return partialResult + next
}
print(totalRevenue)
// 600
728x90
반응형
'Swift' 카테고리의 다른 글
[ Swift ] 프로토콜 (0) | 2023.02.01 |
---|---|
[ Swift ] 구조체와 클래스 (0) | 2023.01.30 |
[ Swift ] 옵셔널 (0) | 2023.01.25 |
[ Swift ] 반복문 (0) | 2023.01.23 |
[ Swift ] 조건문 (0) | 2023.01.20 |