Basic - Functions

Eli·2021년 1월 30일
2

Swift

목록 보기
2/17
post-thumbnail

기본정의 및 호출

이번 역시도 보면 알만한 내용들

//정의
func greet(person: String) -> String {
	let greeting = "Hello, " + person
	return greeting
}

//파라미터 없는 함수
func greetWithoutParam() -> String {
	return "Hello"
}

//반환 없는 함수
func greetWithoutReturn(person: String) {
	let greeting = "Hello, " + person
	print(greeting)
}

//호출
print(greet(person: "Eli")) // print "Hello, Eli"

Multiple return values

나름 편리한 기능에 속하는 내용인데 한개의 함수에서 여러개의 return값을 생성해서 뱉을 수 있다.

func minMax(array: [Int]) -> (min: Int, max: Int) {
	let sortedArray = array.sorted(by: <)
	return (sortedArray.first!, sortedArray.last!)
}

Specifying Argument Labels

자주 쓰는 기능중 하나.
인자값의 길이가 길어지면 줄이려는 아이디어를 많이 내곤하는데,
띄어쓰기를 통해 더 상세한 설명을 붙여써서 가독성면에서 굉장히 이점이 있다.

func greet(person: String, from hometown: String) -> String {
    return "Hello \(person)!  Glad you could visit from \(hometown)."
}

//호출시 from hometown을 from으로 기술하여 사용.
print(greet(person: "Bill", from: "Cupertino"))

Swift Function에서 축약 기능들

Swift는 간결함을 굉장히 내세운다.
애플이 설계하고 만든 만큼 언어에서도 미니멀함을 느낄 수 있는 부분들이 자주 있어서, 앞으로 축약기능에 대해서는 챕터마다 빼서 보여주려한다.

Swift를 처음 접하는 사람들은 축약이 너무 많아서 언어 자체가 생소하게 느껴지는 부분도 많은 것 같다. 그러나 나는 굉장히 편리하다.

//인자명 생략
//인자명 앞에 "_ "을 추가해주면서 호출시 인자명 생략 가능
func greet(_ person: String) {
 //Something
}

print(greet("Eli")) // print "Eli"


//return 생략
//바디가 한줄일 경우, return을 생략가능
func greet(person: String) -> String {
	"Hello, " + person
}

Inout Parameters

기본적으로 Swift함수에서 넘어오는 인자들은 상수값이나, 이를 변수로 사용하고 싶을 때 사용하게 되는 기능이다.
캡쳐되어 상수로 내려오는 것이 아니라 값 래퍼런스 자체를 넘기는 것 같다.
함수 scope 밖에 영향을 줄 수 있는 방법. scope 밖을 건들게 되면서 불변성을 보장하지 못하게 되므로 생각을 잘 해서 쓰도록 하자.

func swapInts(_ a: inout: int, _ b: inout: Int) {
		let temporaryA = a
    a = b
    b = temporaryA
}

var firstValue = 3
var secondValue = 100

swapInts(&firstValue, &secondValue)
print("first \(firstValue) , second \(secondValue)"
//print "first 100, second 3"

Function Type

Swift에서 function은 1급 객체로 취급을 받는다.
그러므로 특정 상수/변수로 선언 할 수 있으며, 함수의 파라미터로도 넘어갈 수 있다. (비동기 처리에서 사용될 수 있다. 추후 Closure 파트에서 더 자세히 다룬다)

func add(_ a: Int, _ b: Int) -> Int {
	return a + b
}

//상수로 선언의 경우
let addFunc: (Int, Int) -> Int = add

//함수에서 파라미터로의 사용 경우
func printCalculateResult(
_ operatorFunction: (Int, Int) -> Int, 
_ a: Int, _ b: Int
) {
	print(operatorFuction(a, b))
} 

printCalculateResult(addFunc, 10, 12) //print 22

//함수를 return 값으로 사용 경우
func stepForward(_ input: Int) -> Int {
    return input + 1
}
func stepBackward(_ input: Int) -> Int {
    return input - 1
}

func chooseStepFunction(backward: Bool) -> (Int) -> Int {
    return backward ? stepBackward : stepForward
}

#학습에 대한 내용으로 틀린 내용이 있을 수 있습니다.
#댓글로 남겨주시면 더 좋은 게시글로 수정하도록 하겠습니다.

profile
애플을 좋아한다. 그래서 iOS 개발을 한다. @Kurly

0개의 댓글