Language/Swift

Swift 함수 고급

Greensky0026 2021. 3. 9. 17:11
반응형

매개변수에 기본값 지정

//매개변수의 타입을 지정한 뒤에 "=기본값"을 입력해 기본값을 지정합니다.
func funcName(parameter1: String, parameter2: String="다다익선"){
    print("\(parameter1)은(는) \(parameter2)!")
}
//기본값을 가지는 매개변수는 호출시 생략 가능.
funcName(parameter1:"공부") //공부은(는) 다다익선!
funcName(parameter1:"게임", parameter2:"적당히") //게임은(는) 적당히!

 

전달인자 레이블 사용

전달인자 레이블은 함수를 호출해서 사용할 떄,

변수들을 쉽게 구분하기 위한 용도로 사용합니다.

별다른 명칭없이 넣고 싶다면 _를 사용하면 됩니다.

func func1(from name1: String, to name2: String){
    //함수 내부에선 매개변수 이름을 사용한다.
    print("\(name1)는 \(name2)에게 인사합니다.")
}

//함수 호출시는 전달인자 레이블을 사용해야 합니다.
func1(name1: "나", name2: "당신") //오류
func1(from: "나", to: "당신") //나는 당신에게 인사합니다.


//_사용시 java처럼 별다른 명칭없이 매개변수를 넣을 수 있다.
func func2(_ name1: String, _ name2: String){
    //함수 내부에선 매개변수 이름을 사용한다.
    print("\(name1)는 \(name2)에게 인사합니다.")
}
func2( "나", "당신") //나는 당신에게 인사합니다.

 

 

가변 매개변수 사용

전달받을 값의 개수를 알기 어려울때 사용합니다.

단, 가변 매개변수는 함수당 하나만 가질 수 있습니다.

func fun1(me name1: String, friends name2: String...) -> String{
    return "아..안녕 \(name2)! 나 \(name1)랑 친구해줄래...?"
}

print( fun1(me: "아무무", friends: "베이가", "애니", "티모") )  
//아..안녕 ["베이가", "애니", "티모"]! 나 아무무랑 친구해줄래...?

//가변매개변수는 입력을 하지 않을수도 있습니다.
print( fun1(me: "아무무") )
//아..안녕 []! 나 아무무랑 친구해줄래...?

 

함수타입 사용

Swift는 다중 프로그래밍 패러다임 언어로써, 함수는 일급객체로 취급됩니다.

그래서 Swift에서는 함수 자체를 타입으로 사용할 수 있습니다.

즉, 함수를 데이터 타입 뿐만 아니라 매개변수 및 리턴타입으로도 사용가능합니다.

 

//타입으로 사용할 함수
func basicFunc(me name1: String, friend name2: String) ->String{
    return "\(name1)는 \(name2)와 친구야!"
}

func basic2Func(me name1: String, friend name2: String) ->String{
    return "\(name1)는 \(name2)와 친구가 아니야!"
}

func anotherFunc(me name: String, age num: Int) ->String{
    return "\(name)는 \(num)살이야!"
}

 

함수를 타입으로 사용

var callFunc: (String, String) ->String = basicFunc(me: friend:)
print( callFunc("애니", "아무무") )//애니는 아무무와 친구야!

//물론 타입이 다른 함수는 할당이 불가능합니다.
var callFunc: (String, String) -> Void = anotherFunc(me: age:) //에러

//타입으로 사용하는 함수의 매개변수는 생략이 가능합니다.
var callFunc2: (String, String) ->String = basicFunc
print( callFunc2("애니", "아무무") )//애니는 아무무와 친구야!

 

함수를 매개변수로 사용

func useFuncParameter(_ type: String, _ addFunc: (String, String)->String,
     _ name1: String, _ name2: String)-> Void{
        print ( "\(type)인 \(addFunc(name1, name2))" );
    }
useFuncParameter("인싸", basicFunc, "애니", "아무무")
//인싸인 애니는 아무무와 친구야!

 

함수를 결과값으로 사용

(위의 useFuncParameter함수 사용)

func useFuncResult(_ type: Bool) ->(String, String)->String{
    return type ? basicFunc : basic2Func
}
useFuncParameter("인싸", useFuncResult(true), "애니", "아무무")
//인싸인 애니는 아무무와 친구야!
useFuncParameter("아싸", useFuncResult(false), "아무무", "애니")
//아싸인 아무무는 애니와 친구가 아니야!

 


공부에 도움을 준 사이트

 

* 전체적인 공부 가이드라인

yagom.net/

 

야곰닷넷 - yagom.net

iOS 개발자들의 놀이터, 배움터, 모임터, 기록보관소 야곰닷넷입니다.

yagom.net

 

* 예제 참고

https://noahlogs.tistory.com/19

 

[Swift 공부] 함수

 Swift를 제대로 사용하기 위해 함수에 대해서 알아보자. 프로그래밍 언어에서 함수는 특정한 작업을 수행하는 코드들의 모임이다. 어떤 프로그램에서 코드들이 쭉 있다면 그중 일부분을 떼어

noahlogs.tistory.com

 

반응형