스터디를 진행하며 처음부터 다시 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 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 파라미터에 인자로 전달할 때 변수의 이름 앞에 &
를 붙여줍니다.
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