Xcode 9.*에서 Swift를 사용하는 경우 함수를 정의하고 호출하는 것을 살펴봅니다. #5

in #kr8 years ago (edited)

Swift는 객체지향언어이기도 하고 함수형 언어이기도 합니다. 클래스나 구조체라는 형식을 정의하지 않아도 모듈에 함수를 단독으로 정의할 수 있습니다. 아래와 같이 간단한 코드를 작성해 봅니다.

간단한 함수를 정의하고 호출하기

import UIKit

//매개변수와 반환값이 모두 없는 함수
func printHello() {
    print("안녕하세요")
}

printHello()

func sayHello() -> String {
    let returnValue = "안녕하세요"
    return returnValue
}

let returnVal = sayHello()
print(returnVal)

func sayHelloWithName(name : String) -> String {
    let returnValue = "\(name)님 안녕하세요"
    return returnValue
}

함수를 호출할 때 매개변수(인자)앞에 매개변수명을 꼭 붙여야 합니다!!!

또한 Swift 3.0부터는 첫번째 인자에 대한 매개변수명도 붙어야 합니다. 매개변수가 1개면 1개를 붙이고, 2개면 2개를 꼭 붙여야 합니다.

let returnVal2 = sayHelloWithName(name: "전우치")
print(returnVal2)


//매개변수에 대해 기술해야 합니다. 함수를 정의할 때 붙인 이름을 호출할 때도 붙여야 합니다. 
func printHelloWithName(name : String, welcomeMessage : String) {
    print("\(name)님, \(welcomeMessage)")
}

//위의 함수를 호출할 때 아래와 같이 호출합니다. 
printHelloWithName(name: "전우치", welcomeMessage: "안녕")

실인자를 넘기기

C#에서는 매개변수명 앞에 ref를 붙이면 값형식도 참조가 넘어갑니다. Swift에도 비슷하게 inout키워드가 제공됩니다.

//Swift 3.0부터 inout키워드의 위치가 아래와 같이 변경되었습니다. 
func mySwap(a:inout Int, b:inout Int) {
    let t=a; a=b; b=t;
}

var x = 100
var y = 200
mySwap(a: &x, b: &y)
print("x=\(x), y=\(y)")

_를 사용해서 무시하기. 파라메터명을 기술하지 않고 넘어갑니다.

C#이나 자바를 주로 사용했던 개발자들에게 많이 받는 질문입니다. 왜 매개변수명을 붙여야 하나요? 아직은 언어만 Swfit로 변경된 상태이고 Swift standard library외에도 수 많은 Objective-C기반의 라이브러리들이 있습니다. 기존 언어로 된 객체의 메서드를 부르는 경우는 항상 매개변수명을 붙여서 처리해야 합니다. 이 부분을 생략하고 싶다면 외부 매개변수로 _를 기술해 주면 생략할 수 있습니다.

func compare(a:Int, b:Int, _:Bool) -> Bool {
    return a > b
}

var result = compare(a:20, b:10, true)
print(result)

Coin Marketplace

STEEM 0.12
TRX 0.34
JST 0.032
BTC 114278.23
ETH 4229.96
USDT 1.00
SBD 0.77