post list

2015년 3월 21일 토요일

Swift(스위프트) 강좌 : 빠르게 시작하기 4


함수(Functions)


함수의 정의

                                                     

func HappyOri(myName : String) -> String {    
    let greeting = "Happy" + myName            
    return greeting 
}        

함수를 정의할때는 func 먼저 적고 함수 이름을 적습니다. HappyOri가 함수 이름입니다.그리고 괄호안에 입력 파라미터를 적고  -> 다음에 반환타입을 적어줍니다. 

당연히 복수의
입력 파라미터를 가질 수 있고  튜플을 이용해 복수의 반환 값을 가질 수 있습니다



복수의 반환값을 가지는 함수


func minMax(array: [Int]) -> (min: Int, max: Int) {
    var currentMin = array[0]
    var currentMax = array[0]
    for value in array[1..<array.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
}


다음과 같이 반환된 값을 사용할 수 있습니다.


let bounds = minMax([8, -62109371])
println("min is \(bounds.min) and max is \(bounds.max)")
// prints "min is -6 and max is 109"


외부 파라미터 이름(Extrernal Prameter Names)

함수를 정의 할때 외부 파라미터 이름을 지정할 수 있습니다.
기존 내부 파라미터 이름 앞에 외부 파라미터이름을 넣을 수 도 있고 # 을 이용해 내부 파라미터이름과 외부 파라미터 이름을 합칠 수 도 잇습니다.
// 내부 파라미터 이름
func join(s1: String, s2: String, joiner: String) -> String {
    return s1 + joiner + s2
}
// 외부 파라미터 이름
func join(string s1: String, toString s2: String, withJoiner joiner: String)
    -> String {
        return s1 + joiner + s2
}
//단축 외부 파라미터 이름
func join2(#string: String, #toString: String, #withJoiner: String) -> String {
    return string + withJoiner + toString
}



외부 파라미터를 쓰지 않으면 함수를 사용할때 입력 파라미터의 목적이 불분명해질 수 있습니다.
그래서 외부 파라미터를 쓰면 편한경우가 많습니다.
다음은 위의 3개의 함수를 사용할때의 모습입니다.  






기본(default) 파라미터 값

함수의 파라미터에 기본값을 설정할 수 있습니다. 
기본값을 설정후  함수사용시 값을 입력하지 않으면  기본값을 이용합니다.
이때 외부 이름을 부여하지 않은 파라미터에 대해 자동으로 외부 파라미터이름을 제공합니다.
# 를 사용한 것과 같은 효과를 가집니다.
func plus(num : Int = 0 , num2 : Int = 0 ) -> Int {
    return num + num2
}
plus(num: 2, num2: 2)
//return is 4
plus()
//return is 0


가변 개수(Variadic) 파라미터

임의의 개수를 입력받는 함수를 정의하기위해 입력 파라미터 타입뒤에 마침표 세개(...)  삽입하면 됩니다. 함수 내부에 전달된 값은 적절한 타입의 배열(Array)로 만들어 집니다.
func arithmeticMean(numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}
arithmeticMean(12345)
// returns 3.0, which is the arithmetic mean of these five numbers
arithmeticMean(38.2518.75)
// returns 10.0, which is the arithmetic mean of these three numbers


댓글 없음:

댓글 쓰기