-
Swift 5.6 Functions기술/iOS 2022. 3. 20. 17:41
Functions
Defining and Calling Functions
Functions with Multiple Return Values
여러 개의 값을 반환하기 위해 함수의 반환 타입으로 튜플 타입을 사용할 수 있습니다.
func minMax(array: [Int]) -> (min: Int, max: Int) { var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) }
함수의 반환 값을 조회할 때 이름으로 접근할 수 있도록 min, max 로 라벨되어 있습니다.
let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) print("min is \\(bounds.min) and max is \\(bounds.max)") // Prints "min is -6 and max is 109"
튜플의 멤버 이름은 함수 반환 타입의 일부로 이미 지정되어 있으므로 함수에서 튜플이 반환되는 시점에 이름을 지정할 필요가 없습니다.
Functions with an Implicit Return
함수 전체 바디가 한줄로 표현된다면 함수는 맹목적으로 표현식을 반환합니다.
func greeting(for person: String) -> String { "Hello, " + person + "!" } print(greeting(for: "Dave")) // Prints "Hello, Dave!"
단일 return 으로 작성된 함수는 return 을 생략할 수 있습니다.
Function Argument Labels and Parameter Names
각 함수 파라미터는 인자 라벨과 파라미터 이름을 가지고 있습니다. 인자 라벨은 함수가 호출될 때 사용되고 파라미터 이름은 함수를 구현할 때 사용합니다. 기본적으로 파라미터는 인자 라벨로 파라미터 이름을 사용합니다
Specifying Argument Labels
공백으로 구분하여 파라미터 이름 앞에 인자 라벨을 작성합니다.
func greet(person: String, from hometown: String) -> String { return "Hello \\(person)! Glad you could visit from \\(hometown)." } print(greet(person: "Bill", from: "Cupertino")) // Prints "Hello Bill! Glad you could visit from Cupertino."
인수 라벨을 사용하면 문장과 같은 표현 방식으로 함수를 호출할 수 있는 동시에 읽기 쉽고 의도가 명확한 함수 바디를 제공할 수 있습니다.
Omitting Argument Labels
파라미터 인수 라벨을 원하지 않으면 명시적인 인수 라벨 대신 언더바를 작성합니다.
func someFunction(_ firstParameterName: Int, secondParameterName: Int) { // In the function body, firstParameterName and secondParameterName // refer to the argument values for the first and second parameters. } someFunction(1, secondParameterName: 2)
파라미터가 인수 라벨을 가지고 있다면 함수를 호출할 때 인수는 반드시 라벨을 지정해야 합니다.
Variadic Parameters
가변 파라미터는 0개 이상의 특정 타입의 값을 허용합니다. 가변 파라미터는 파라미터 타입 이름 뒤에 세개의 기간 문자를 추가하여 작성합니다.
가변 파라미터에 전달된 값은 함수 바디 내에서 적절한 타입의 배열로 사용할 수 있습니다.
func arithmeticMean(_ numbers: Double...) -> Double { var total: Double = 0 for number in numbers { total += number } return total / Double(numbers.count) } arithmeticMean(1, 2, 3, 4, 5) // returns 3.0, which is the arithmetic mean of these five numbers arithmeticMean(3, 8.25, 18.75) // returns 10.0, which is the arithmetic mean of these three numbers
함수는 여러개의 가변 파라미터를 가질 수 있습니다. 가변 파라미터 뒤에 오는 첫번째 파라미터는 인수 라벨을 가지고 있어야 합니다. 인수 라벨은 가변 파라미터에 전달되는 인수와 가변 파라미터 뒤에 오는 파라미터에 전달되는 인수를 명확히 합니다.
In-Out Parameters
함수 파라미터는 기본적으로 상수입니다. 해당 함수 바디 내에서 함수 파라미터 값을 변경하려고 하면 컴파일 타임 에러가 발생합니다. 함수 파라미터 값을 변경하고 함수 호출이 종료된 후에도 변경된 값을 유지하고 싶다면 in-out 파라미터로 대신 정의합니다.
in-out 파라미터의 인자로 변수만 전달할 수 있습니다. 상수와 반복은 수정할 수 없기 때문에 인자로 상수 또는 반복 값은 전달할 수 없습니다. 함수에 수정가능함을 알리기 위해 in-out 파라미터에 인자로 전달할 대 변수의 이름 앞에 앰퍼샌드를 붙여줍니다.
func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) print("someInt is now \\(someInt), and anotherInt is now \\(anotherInt)") // Prints "someInt is now 107, and anotherInt is now 3"
'기술 > iOS' 카테고리의 다른 글
Swift 5.6 Enumerations (0) 2022.03.20 Swift 5.6 Closures (0) 2022.03.20 Swift 5.6 Control Flow (0) 2022.02.26 Swift 5.6 Arrays (0) 2022.02.26 Swift 5.6 Strings and Characters (0) 2022.02.25