스위프트 문법 3 (함수)

스위프트 문법 3 (함수)

- 4 mins

Function

스위프트에는 다양한 종류의 함수가 있다. 아래에서 예제와 함께 설명하도록 하겠다.


파라미터 내부 이름과, 외부 이름을 똑같이 사용할때는 아래와 같이 파라미터에 이름하나와 타입을 입력하면 된다.

//내부, 외부 모두 person이라는 이름으로 파라미터 사용
func greetAgain(person: String) -> String { 
    return "Hello again, " + person + "!"
}

greetAgain(person: "Anna")


외부에서 파라미터를 선언할때 파라미터의 이름을 따로 입력하지 않게 만들고 싶다면 아래와 같이 외부 파라미터 이름을 언더바(_)로 입력해준다.

func greetAgain(_ person: String) -> String { 
    return "Hello again, " + person + "!"
}

greetAgain("Anna") //따로 파라미터 이름을 적지 않고 값을 넣을 수 있다.


파라미터 내부 이름과, 외부 이름을 다르게 사용할때는 아래와 같이 파라미터에 외부 이름, 내부 이름 순으로 쓰고 타입을 입력하면된다.

//외부이름: argumentLabel, 내부이름: parameterName
func someFunction(argumentLabel parameterName: Int) { 
    print(parameterName) //내부에서 쓰는 이름으로 사용
}

someFunction(argumentLabel: 10) //외부에서 쓰는 이름 argumentLabel


사용자가 따로 파라미터값을 입력하지 않을때 초기화 값이 있는경우 파라미터에 원하는 값을 넣어주면 된다..

//두번째 파라미터(parameterWithDefault의 default값을 12로 지정)
func functionWithDefault(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) -> Int {
    return parameterWithDefault
}

functionWithDefault(parameterWithoutDefault: 3, parameterWithDefault: 6) 
functionWithDefault(parameterWithoutDefault: 4)


파라미터의 수를 모를때 One-Sided Ranges를 이용한다.

//Variadic Parameters 파라미터 수를 모를때 사용
func arithmeticMean(_ numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}

arithmeticMean(1,3,4,5,6)


위 예시처럼 파라미터의 수를 모른체 파라미터를 받고, 마지막으로 또 다른 파라미터를 받고싶으면 아래와 같이 한다.

func arithmeticMean1(_ numbers: Double...,and and2:Double) -> Double{  //and, and2처럼 둘다 이름을 짓어야함
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / and2
}

arithmeticMean1(1,3,4,5,6, and: 10)


파라미터가 없지만 리턴이 있는 함수

func sayHelloWorld() -> String {
    return "hello, world"
}

print(sayHelloWorld())


파라미터는 있지만 리턴이 없는 함수

func printSomeThing(someThing: String) {
    print(someThing)
}

printSomeThing(someThing: "Hello")


Nested Functions (중첩 함수)
외부에는 숨기고 함수 내부에서만 사용할 함수를 중첩하여 사용 가능

func chooseStepFunction(backward: Bool, value: Int) -> Int {
  func stepForward(input: Int) -> Int {
    return input + 1
  }
  func stepBackward(input: Int) -> Int {
    return input - 1
  }
  
  if backward {
    return stepBackward(input: value)
  } else {
    return stepForward(input: value)
  }
}


var value = 4
chooseStepFunction(backward: true, value: value)
chooseStepFunction(backward: false, value: value)


comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora