English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 기사에서는 다양한 사용자 정의 함수를 배울 것입니다. 이 함수들은 예제를 통해 다양한 타입의 입력을 받고 출력을 반환합니다.
이전 기사에서Swift 함수에서지금까지 함수에 대해 배웠습니다. 이제 Swift에서 함수를 생성하는 다양한 방법과 타입, 즉 함수에서 입력과 출력을 처리하는 방법에 대해 탐구하겠습니다.
이러한 타입의 함수는 어떤 입력도 받지 않고 어떤 반환 값도 가지지 않습니다.
func funcname() { //문장 {} 또는 func funcname() ->() { //문장 {} 또는 func funcname() ->Void { //문장 {}
이 모든 문법은 매개변수 없이 반환 값을 가지지 않는 함수를 생성하는 데 유효합니다.
위의 문법 func funcname()->()도 func funcname()와 동일합니다.->void, void는 ()의 타입 별칭일 뿐입니다. 여기서Swift 타입 별칭자세한 정보를 더 알아보세요.
func greetUser() { print("Good Morning!") {} greetUser()
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
Good Morning!
이러한 타입의 함수는 어떤 입력도 받지 않고 값을 반환합니다. 반환 타입을 추가하려면 화살표(>)를 추가합니다.->)와 반환 타입.
func funcname() -> ReturnType { //문장 return value {}
func greetUser() -> String { return "Good Morning!" {} let msg = greetUser() print(msg)
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
Good Morning!
위 프로그램에서 반환 타입을 String으로 정의했습니다. 이제 이 문장은 함수 내부의 문장에서 문자열을 반환해야 하지 않으면 오류를 발생시킵니다.
return 키워드는 프로그램의 제어권을 함수 본체에서 함수 호출로 이동시킵니다. 함수에서 값을 반환하려면 return 키워드 뒤에 반환할 값을 추가합니다.
return "Good Morning!" 문장은 함수에서 String 타입의 값을 반환합니다. 반환 값을 타입과 값이 일치해야 합니다.
또한 반환 값을 변수나 상수에 할당할 수 있습니다. let msg = 반환 값을 상수 msg에 할당하면. 따라서 이 문장 print(msg)는 출력"Good Morning!".
그 값을 무시하고 싶다면 단순히 언더스코어(_)를 사용하면 됩니다. 즉, let _ =.
파라미터는 함수 내에서 입력을 위해 사용됩니다. 파라미터는 파라미터 이름과 타입을 포함하고, 뒤에 콜론(:)이 follows. 이러한 유형의 함수는 입력 파라미터를 사용하지만 값을 반환하지 않습니다.
func funcname(parameterName: Type) { //문장 {}
func greetUser(msg: String) { print(msg) {} greetUser(msg: "Good Morning!")
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
Good Morning!
위 프로그램에서는 문자열 유형의 단일 파라미터를 받아 이 파라미터는 함수 내부에서만 사용됩니다. msg는 파라미터 이름입니다.
greetUser(msg: "Good Morning!") 함수를 호출하려면 파라미터 이름이 msg인 문자열 값을 전달할 수 있습니다. 이 파라미터 이름은 greetUser() 함수 내부에서만 볼 수 있습니다.
따라서 print(msg) 문은 다음과 같이 출력됩니다 "Good Morning!".
이러한 유형의 함수는 파라미터를 사용하여 값을 반환합니다.
func funcname(parameterName: Type) -> ReturnType { //문장 {}
func greetUser(name: String) -> String { return "Good Morning! " + name {} let msg = greetUser(name: "Jack") print(msg)
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
Good Morning! Jack
위 프로그램에서는 String 유형의 단일 파라미터를 받아 String 유형의 값을 반환하는 함수입니다.
이러한 유형의 함수는 쉼표로 구분된 여러 파라미터를 사용하며 여러 값을 반환합니다. Swift에서는 튜플을 사용하여 여러 값을 반환할 수 있습니다.
func funcname(parameterName: Type, parameterName2: Type, ...) -> (ReturnType, ReturnType...) { //문장 {}
func greetUser(name: String, age: Int) -> (String, Int) { let msg = "Good Morning!" + name var userage = age if age < 0 { userage = 0 {} return (msg, userage) {} let msg = greetUser(name: "Jack", age: -2) print(msg.0) print("You have (msg.1) coins left")
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
Good Morning!Jack You have 0 coins left
위의 프로그램에서 greetUser() 함수는 String과 Int 타입의 여러 파라미터를 받습니다. 이 함수는 또한 String과 Int 타입의 여러 값을 반환합니다.
모든 반환 값을 접근하기 위해 인덱스 위치 0을 사용합니다.1… 여기서는 msg.0을 사용하여 "Good Morning!Jack"과 msg.1 0에 접근하세요.
인덱스 위치를 사용하는 것은 때로는 불직관적이고 읽기 어렵습니다. 반환 값을 이름으로 지정하여 이 문제를 유연하게 해결할 수 있습니다. 위의 프로그램은 다음과 같은 방식으로 다시 작성될 수 있습니다.
func greetUser(name: String, coins: Int) -> (name: String, coins: Int) { let msg = "Good Morning!" + name var userCoins = coins if coins < 0 { userCoins = 0 {} return (msg, userCoins) {} let msg = greetUser(name: "Jack", coins: -2) print(msg.name) print("You (msg.coins) coins left")
이 프로그램에서는 튜플로 반환되는 반환 타입이며, 이 타입을 가진 변수 이름이 포함됩니다. 이렇게 하면 변수 이름 msg.name과 msg.coins를 사용할 수 있는 주요 장점이 있습니다. 대신 msg.0과 msg.1 결과에 접근하세요.
입력을 받는 함수를 정의할 때, 파라미터 이름의 도움으로 입력 이름을 정의할 수 있습니다. 그러나, 파라미터 이름과 함께 사용할 수 있는 또 다른 이름이 있습니다. 이는 파라미터 태그라고 합니다.
파라미터 태그의 사용은 함수를 문장처럼 호출할 수 있게 하면서도, 읽기 쉽고 의도가 명확한 함수 본체를 제공합니다.
모든 함수 파라미터는 파라미터 태그와 파라미터 이름을 가집니다. 기본적으로, 파라미터는 그 파라미터 이름을 파라미터 태그로 사용합니다. 그러나, 파라미터 이름을 명시적으로 정의하면 함수 호출 시 파라미터 태그를 사용합니다.
파라미터 태그를 가진 함수의 문법은 다음과 같습니다.
func funcname(argumentLabel parameterName: Type)-> 리턴 타입 { //문장 {}
아래의 예제에서 이점을 확인해 보겠습니다.
func sum(a: Int, b: Int) -> Int { return a + b {} let result = sum(a: 2, b: 3) print("The sum is \(result)")
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
The sum is 5
위 예제에서 매개변수 태그를 지정하지 않았기 때문에, 함수 호출 시 기본 매개변수 이름 a와 b를 사용합니다.
함수 호출을 할 때, 함수 호출이 표현적이지 않을 수 있습니다./문장. 만약 함수 호출을 설정할 수 있다면:
let result = sum(of: 2, and: 3)
지금은 함수를 변경해 봅시다:
func sum(of Int, and Int) -> Int { return of + and {} let result = sum(of: 2, and: 3) print("The sum is \(result)")
지금은 메서드 호출은 표현적이지만, 지금은 매개변수 이름 of&and를 사용해야 합니다. return of + and를 사용하여 두 개의 숫자의 합을 찾습니다. 이제 이는 함수 본체의 가독성이 낮아졌습니다. 함수 본체에서 a와 b를 사용하는 것이 더 의미 있어요.
이를 위해 매개변수 태그를 명확히 정의해야 합니다:
func sum(of a: Int, and b: Int) -> Int { return a + b {} let result = sum(of: 2, and: 3) print("The sum is \(result)")
위 프로그램에서 함수는 Int 타입의 두 개의 매개변수를 받습니다. 함수 호출은 of&and 태그를 사용합니다. 이는 sum(of) 호출 시도도 더 의미 있어요. 2, and: 3)) 대신 sum(a: 2, b: 3)
또한, 함수 본체는 매개변수 이름 a와 b를 사용하며, of&and 대신 사용되어, 응용 작업 시도도 더 의미 있어요.
매개변수 이름 앞에 밑줄 _를 써서 매개변수 태그를 생략할 수 있습니다.
func sum(_ a: Int, _ b: Int) -> Int { return a + b {} let result = sum(2, 3) print("The sum is \(result)")
함수의 어떤 매개변수에도 기본 값을 제공할 수 있습니다. 이는 매개변수의 타입 뒤에 값을 할당하는 방법으로 제공됩니다. 기본 매개변수를 제공하면 함수 호출 시 매개변수를 무시할 수 있습니다.
함수 호출 시 값이 전달되지 않았을 경우 기본 값이 사용됩니다. 그러나 호출 시 값이 명시적으로 전달되면 지정된 값이 사용됩니다.
func funcname(parameterName: Type = value) -> 리턴 타입 { //문장 {}
func sum(of a: Int = 7, and b:Int = 8) -> Int { return a + b {} let result1 = sum(of: 2, and: 3) print("The sum is \(result1)") let result2 = sum(of: 2) print("The sum is \(result2)") let result3 = sum(and: 2) print("The sum is \(result3)") let result4 = sum() print("The sum is \(result4)")
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
The sum is 5 The sum is 10 The sum is 9 The sum is 15
위의 프로그램에서 함수 sum(of a: Int =}} 7 , and b: Int = 8) -> Int는 두 개의 Int 타입의 매개변수를 받아들여서 매개변수 a=7과 b=8의 기본 값.
value를 함수 호출에서 매개변수로 전달하면, sum(of: 2, and: 3)을 사용합니다2와3로 매개변수 기본 값 대신 사용됩니다.
하지만 sum()로 매개변수 값을 전달하지 않으면, 기본 값7와8로 매개변수 값.
변경 가능한 매개변수는 0개 또는 여러 개의 특정 타입의 값을 받을 수 있습니다. 매개변수 타입 이름 뒤에 세 개의 반점 문자 (...)를 추가하여 변경 가능한 매개변수를 지정할 수 있습니다.
함수 호출에서 다양한 수의 입력 값을 매개변수로 전달해야 할 때, 일반적으로 변경 가능한 매개변수를 사용합니다. 예를 들어, 숫자 목록, 문자 목록 등입니다.
변경 가능한 매개변수를 가진 함수의 문법은 다음과 같습니다:
func funcname(parameterName: Type...) -> 리턴 타입 { //문장 {}
func sum(of numbers: Int...) { var result = 0 for num in numbers { result += num {} print("수의 합은 \(result)") {} sum(of: 1, 2, 3, 4, 5, 6, 7, 8)
위의 프로그램에서 함수 sum(of numbers: Int...)는 Int 타입의 변경 가능한 매개변수를 받아들입니다. 변경 가능한 매개변수는 쉼표로 구분된 여러 값을 받을 수 있습니다. sum(of: 1, 2, 3, 4, 5, 6, 7, 8)
변경 가능한 매개변수로 전달된 값1,2,3,4,5,6,7,8함수 내에서 Int 타입의 배열로 사용할 수 있습니다. 따라서, for-in 루프는 for num in numbers로 적용됩니다.
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
수의 합은 36
주의: Swift의 내장 print() 함수는 임의의 타입의 변경 가능한 매개변수도 받아들입니다.
Any는 Swift에서의 모든 데이터 타입을 나타내며, 예를 들어 Int, Float, Double, String 등입니다.
함수 매개변수를 정의할 때, 함수 내에서 매개변수를 수정할 수 없습니다. 따라서, 기본적으로 그들은 상수입니다. 예제를 통해 보겠습니다:
func process(name: String) { if name == ""{ name = "guest" {} {}
위의 프로그램은 컴파일 시 오류가 발생합니다. 왜냐하면 매개변수의 값을 변경할 수 없기 때문입니다.
함수가 매개변수 값을 수정하려면 매개변수를 in으로 정의해야 합니다.-out 매개변수. inout 키워드를 매개변수 타입 앞에 두면 입력/출력 매개변수.
백그라운드에서 하나의 in-out 매개변수는 함수에 전달되는 값을 가지고 있으며, 함수에서 수정되고, 원래 값 대신 함수로부터 전달받아집니다. 따라서, 함수 호출에서 전달하는 값은 상수일 수 없습니다. 변수로 선언해야 합니다.
inout 매개변수를 가진 함수의 문법은 다음과 같습니다:
func funcname(parameterName: inout Type) -> 리턴 타입 { //문장 {}
func process(name: inout String) { if name == ""{ name = "guest" {} {} var userName = "" process(name: &userName) print(userName)
위의 프로그램을 실행할 때, 출력은 다음과 같습니다:
guest
위의 프로그램에서는 함수 내에서 변경할 수 있도록 inout 매개변수를 받는 함수를 선언했습니다./param name을 변경합니다.
param 인자를 in으로 전달할 때-out 매개변수를 사용할 때는 반드시 변수 이름 앞에 & 기호를 사용하여 함수가 변경할 수 있도록 해야 합니다.