[Swift] 함수2

Dzeko·2021년 7월 29일

Swift 기본

목록 보기
13/20
post-thumbnail

함수기본

func printName() {
    print("My Name is Hyeongwon!")
}
printName()

파라미터를 이용

func multiplyTen(param:Int) {
    print("\(param * 10)")
}
multiplyTen(param: 5)

두개의 파라미터를 이용

func multiplyTwoNum(param1:Int, param2:Int) {
    print("\(param1 * param2)")
}
multiplyTwoNum(param1: 10, param2: 4)

두개의 파라미터와 전달인자 레이블(external parameter)

func printPrice(가격 price: Int, 갯수 count: Int) {
    print("총 \(price * count)원")
}
printPrice(가격: 5000, 갯수: 13)

매개변수 레이블 생략

func printNoNameParam(_ param: String) {
    print("내 이름은 \(param)이다.")
}
printNoNameParam("제라드")

유니코드를 지원하는 스위프트!

func 한글로매개변수출력(_ 매개변수:String) {
    print("한글로 출력한 매개변수는 \(매개변수)입니다.")
}
한글로매개변수출력("\"슬픈 눈의 페페\"")

함수 매개변수의 디폴트 값

func exceptDefaultPrice(가격 price: Int = 1500, 갯수 count: Int) {
    print("총 \(price * count)원")
}
exceptDefaultPrice(갯수: 13)

반환값의 타입

func totalPrice(price: Int, count:Int) -> Int{
    let totalPrice = price * count
    return totalPrice
}
let calculatedPrice = totalPrice(price: 1400, count: 7)
print(calculatedPrice)

도전과제

1. 성, 이름을 받아서 fullname을 출력하는 함수 만들기

func printFullname(firstName: String, lastName: String) {
  print("\(lastName+firstName)")
}
printFullname(firstName: "형원", lastName: "문")

2. 1번에서 만든 함수인데, 파라미터 이름을 제거하고 fullname을 출력하는 함수 만들기

func printFullnameWithoutParamName(_ firstName: String, _ lastName: String) {
  print("\(lastName+firstName)")
}
printFullnameWithoutParamName("형원", "문")

3. 성, 이름을 받아서 fullname을 return 하는 함수 만들기

func returnFullname(firstName: String, lastName: String) -> String{
  return lastName + firstName
}
returnFullname(firstName: "형원", lastName: "문")

함수 고급

Overload - 같은 이름 다른 행동

같은 함수의 이름을 갖지만 다양한 리턴을 줄때 오버로드를 사용함

func printTotalPrice(price: Int, count: Int) {
    print("Total Price : \(price * count)")
}

func printTotalPrice(price: Double, count: Double) {
    print("Total Price : \(price * count)")
}

func printTotalPrice(가격: Int, 갯수: Int) {
    print("Total Price : \(가격 * 갯수)")
}

인아웃 매개변수 (In-Out Parameter)

var value = 9
func incrementAndPrint(_ value: inout Int){
    value += 1
    print(value)
}

incrementAndPrint(&value)

스위프트의 파라미터는 constant로 들어온다. 따라서 inout키워드를 통해 값을 변화시키겠다는 선언이 있어야한다.

inout의 원리
1. 함수가 호출되면, 매개변수로 넘겨진 변수가 복사됩니다.
2. 함수 몸체에서, 복사했던 값을 변화시킵니다.
3. 함수가 반환될 때, 이 변화된 값을 원본 변수에 재할당합니다.


Function as a param

func add(_ a: Int, _ b: Int) -> Int {
    return a + b
}

func subtract(_ a: Int, _ b: Int) -> Int {
    return a - b
}

var function = add
function(4, 3)
function = subtract
function(4, 3)


func printResult(_ function: (Int, Int) -> Int, _ a: Int, _ b: Int) {
    let result = function(a, b)
    print(result)
}
printResult(add, 10, 5)
printResult(subtract, 10, 5)

0개의 댓글