스위프트 공부하자 - 3

crinex·2020년 4월 29일
0

함수와 클로저

함수

  • 함수는 func 키워드를 사용하여 정의하고 -> 를 사용하여 함수의 반환 타입을 정한다.
func hello(name : String, time : Int) -> String {
	var string = ""
    	for _ in 0..<time {
    		string += "\(name)님 안녕하세요\n"
	}
    return string
}
  • 스위프트에서는 특이하게 함수를 호출할때 파라미터 명도 명시해주어야 한다.
hello(name : "Crinex", time : 3)
  • 만약, 함수를 호출할 때 사용하는 파라미터명과 함수 내부의 파라미터명을 다르게 사용하고 싶다면 이렇게 할 수도 있다.
func hello(to name : String, numberOfTimes time : Int) {
	// 함수 내부에서는 name과 time을 사용한다.
    for _ in 0..<time {
    	print(name)
    }
 }
 
 hello(to : "Crinex", numberOfTimes : 3)
  • 파라미터명을 사용하고 싶지 않다면 _ 로 파라미터명을 정의하면된다.
func hello(_ : String, time : Int) {
	code...
}

hello("Crinex", time : 3) // name 생략 가능
  • 파라미터의 기본값을 설정해 줄 수 도있다. 기본값이 지정되면 함수 호출시에 파라미터를 사용하지 않아도 기본값으로 실행된다.
func hello(name : String, time : Int = 1) { 
	code...
}

hello("Crinex")
  • ... 을 사용하면 개수가 정해지지 않은 파라미터를 받을 수 있다.
func sum(_ numbers : Int) -> Int {
	var sum = 0
    	for number in numbers {
        	sum += number
        }
        return sum
 }
 
 sum(1, 2)
 sum(3, 4, 5)
  • 함수안에 함수를 작성할 수도 있다.
func hello(name : String, time : Int) { 
	func message(name : String) -> String {
    		return "\(name)님 안녕하세요"
    	}
        
        for _ in 0..<time {
        	print(message(name : name))
        }
}
  • 함수 안에 정의한 함수를 반환할 수도 있다.
func helloGenerator(message : String) -> (String) -> String {
     func hello(name : String) -> String {
     	return name + message
     }
     return hello
 }
 
 let hello = helloGenerator(message : "님 안녕하세요")
 hello("Crinex")

0개의 댓글