7: functions 1

그루두·2024년 4월 14일
0

100 days of SwiftUI

목록 보기
10/108

100 days of swiftui: 7
https://www.hackingwithswift.com/100/swiftui/7

function

func [함수이름]([매개변수 이름]: [매개변수 데이터 타입]) {
    [함수 내용]
}

이렇게 특정 명령을 실행하는 함수를 만들어 여러 번 활용할 수 있다.

예:

func waterPlants(plants: [String]) {
    for plant in plants {
        print("Water \(plant)~")
    }
}

let plants1 = ["tulip", "sunflower", "lily"]
let plants2 = ["monstera", "cherry blossom"]

waterPlants(plants: plants1)
waterPlants(plants: plants2)

코드 파일
https://github.com/soaringwave/Ios-studying/commit/6eb4bfad83095e56d5fa97a4df3303e36f5bb9db

return

return을 이용하여 함수가 값을 반환하게 하거나 함수를 중단시킬 수 있다.

func getFahrenheit(celsius: Double) -> Double {
    celsius * 9 / 5 + 32
}

print(getFahrenheit(celsius: 36.5))

위 함수처럼 함수의 명령문이 한 줄로 이뤄져 있다면 return을 생략해도 된다.

func count10(stop: Int) {
    for i in 1...10 {
        if i == stop {
            return
        }
        print(i)
    }
}

count10(stop: 4)

결과:

1
2
3

코드 파일
https://github.com/soaringwave/Ios-studying/commit/1855c6f2f40e65ba97200949894d26b22cc96848

return tuple

함수를 사용할 때 값을 여러 개 반환할 때도 있다. 그럴 땐 데이터 그룹인 array, dictionary를 사용할 수도 있다. 그러나 array의 인덱스만 보고 해당 데이터의 의미를 알기 어려울 때도 있고, dictionary에 인덱스 값이 분명히 있다고 장담하지 못해 default를 미리 설정해야 할 때도 있다.
tuple은 데이터 그룹이면서, swift가 tuple의 요소를 모두 알기 때문에 함수에서 값을 반환할 때 사용하면 좋다.

func getIdNumbers() -> (firstNumbers: String, lastNumbers: String) {
    return (firstNumbers: "000101", lastNumbers: "4111111")
}

// 예시 1
let idNumbers = getIdNumbers()
let firstNumbers1 = idNumbers.firstNumbers
let lastNumbers1 = idNumbers.lastNumbers
print("\(firstNumbers1)-\(lastNumbers1)")

// 예시 2
let (firstNumbers2, lastNumbers2) = getIdNumbers()
print("\(firstNumbers2)-\(lastNumbers2)")

// 예시 3
let (firstNumbers3, _) = getIdNumbers()
print("\(firstNumbers2)-*******")

getIdNumbers()는 00년생 1월 1일 생일인 누군가의 주민등록번호를 앞 6자리, 뒤 7자리 숫자를 tuple로 반환한다. 반환받은 tuple은 예시 1처럼 상수나 변수에 나누어 값을 저장해도 되고, 예시 2처럼 튜플 자체를 한 번에 상수나 변수에 저장해도 된다.
만약 튜플의 값 중 사용하지 않을 값이 있다면 예시 3처럼 _를 입력하여 값을 무시해도 좋다.

func getIdNumbers2() -> (String, String) {
    return ("000101", "4111111")
}
print("\(getIdNumbers2().0)-\(getIdNumbers2().1)")

혹은 이렇게 이름 없이 정수 인덱스 값을 활용할 수도 있다.

코드 파일
https://github.com/soaringwave/Ios-studying/commit/81f822d20236eb28752966a247af46455921a604

parameter name

함수를 실행할 때 사용하는 인수와 함수를 설정할 때 함수 안에서 사용하는 매개변수 이름을 다르게 설정할 수 있다.

func isSomeString(if string: String) {
    if string == "some string" {
        print("Yes it is some string!")
    }
}

isSomeString(if: "some string")

위 예시의 첫번째 줄 if는 external name이고, string은 internal name이다. 그래서 인수에는 if, 함수 안의 매개변수는 string을 작성해서 사용할 수 있다. 이러면 데이터 이름으로 허용되지 않는 for, String, func 등을 사용할 수 있다.

contains()처럼 인수 이름을 적지 않아도 되는 경우에는 아래처럼 external name을 _로 설정하고 인수에는 데이터만 입력하면 된다.

func is0(_ number: Int) {
    if number == 0 {
        print("Yes it is 0!")
    } else {
        print("No it is not 0!")
    }
}

is0(3)

코드 파일
https://github.com/soaringwave/Ios-studying/commit/fa7de2fd71233cda4b48d4ae96633d0d2ff67a99

profile
계속 해보자

0개의 댓글

관련 채용 정보