swift-3 함수

영점·2022년 9월 5일
0

Swift_Study

목록 보기
3/12

스터디를 진행하며 처음부터 다시 Swift를 공부하고 있습니다.
오늘 작성할 파트는 함수 입니다.

함수 형태

func greet(person: String) -> String {
    return "Hello, " + person + "!" //축약
}
print(greet(person: "Swift"))
//Hello, Swift!

파라미터 값은 여러개를 넣을 수 있습니다. 또한, 기본값도 설정이 가능합니다.

func greet(person: String = "Swift") -> String {
    return "Hello, " + person + "!"
}
greet() //Hello Swift!
greet(person: "zero") //Hello zero!

호출시, 파라미터를 지정하지 않으면 기본 값으로 들어가고, 파라미터를 지정해주면 지정 값으로 들어갑니다.

파라미터 없는 함수

func sayHello() -> String {
    return "hello, world"
}
print(sayHello())
//hello, world

함수 정의는 어떠한 파라미터가 없더라도 함수의 이름 뒤에 소괄호가 필요합니다.

값을 print하려면 변수명 뒤에 소괄호를 붙여야 해당 함수에 있는 값이 출력됩니다.

파라미터 ( Argument가 있고, 없고 )

파라미터는 이름 뒤에 ()를 치고 안에 원하는 파라미터를 적는 형식인데,

해당 예제는 Argument Label 을 _로 생략하고 Parameter Name 만 선언한 예제입니다.

때문에 함수를 호출할 때 그냥 person에 들어갈 값만 입력을 합니다.

종류
Argument Label함수를 호출할 때 사용하는 이름
Parameter Name함수 내에서 사용할 파라미터의 이름
func greet(_ person: String) -> String {
    return "Hello \(person)!!"
}

greet("Zero")
//Hello Zero!!

Argument Label 이 있다면 함수를 호출할 때 함수명(Argument Label : 값 ) 이 됩니다.

func greet(to person: String) -> String {
    return "Hello \(person)!!"
}

greet(to : "Zero")
//Hello Zero!!

+) 함수는 반환 타입 정의를 요구하지 않습니다. ( 해당 예제에는 리턴타입을 요구했기에 작성한 것 )

In-out 파라미터

함수의 파라미터 값을 변경하고 함수 호출이 종료된 후에도 이러한 변경된 값을 유지하고 싶을 때 사용.

in-out 파라미터의 인자로 변수만 전달할 수 있습니다.
상수와 반복은 수정할 수 없기 때문에 인자로 상수 또는 반복 값은 전달할 수 없습니다.

함수에 수정가능함을 알리기 위해 in-out 파라미터에 인자로 전달할 때 변수의 이름 앞에 &를 붙여줍니다.

func sayHello(name: inout String) {
    name = "zero"
}
 
var name: String = "Dotzero"
sayHello(name: &name)
print(name)
//zero

가변 파라미터

가변 파라미터는 파라미터의 타입 이름 뒤에 세개의 기간 문자 (...)를 추가하여 작성합니다.

가변 파라미터에 전달된 값은 함수 바디 내에서 적절한 타입의 배열로 사용할 수 있습니다.

func number(of nums: Int...) { } //nums라는 가변 파라미터는 [Int]가 된다.

number(of : 1,2,3,4)

가변 파라미터는 ,를 이용해 여러 아규먼트를 받기 때문에,
가변 파라미터 바로 뒤에 있는 파라미터는 무조건 Argument Label을 가져야 합니다.
또한 기본값을 가질 수 없고, n개의 파라미터중 하나의 파라미터만 사용 할 수 있습니다.

중첩 함수 ( 추가 공부 필요 )

함수안에 함수를 선언할 수 있습니다.

func company() {
    print("company")
    
    func staff() {
        print("staff")
    }
}

company 함수 내에서 staff 함수를 실행할 수 있지만, 외부에서는 사용이 불가합니다.
하지만, company 함수에서 staff 함수를 리턴한다면 외부에서 사용이 가능합니다. (예시참고)

func company() -> () -> () {
    print("company")
    
    func staff() {
        print("staff")
    }
		return staff
}

let staff = company()
staff() //staff의 타입은 () -> () 이다.

https://bbiguduk.gitbook.io/swift/
https://babbab2.tistory.com

profile
일단 배운내용은 적어두기

0개의 댓글