Notice
Recent Posts
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
관리 메뉴

도슐랭스타

iOS - 함수(2) 본문

iOS

iOS - 함수(2)

도도.__. 2024. 10. 14. 20:34

guard~let

  • 표현식이 거짓이면 else 절을 실행함.
  • else 절에는 빠져 나가는 구문(return, break, continue, throw 구문)을 반드시 포함해야 함.
var x = 1
while true {
    guard x < 5 else {break}
    print(x)
    x=x+1
}

거짓일 때 실행하기 때문에 1~4까지 출력함.

func multiplyByTen(value: Int?) {
    guard let number = value else {//조건식이 거짓(nil)일 때 else 블록 실행
        print("nil") 
        return
    }
    print(number*10) //조건식이 참일 때 실행, 주의 : number를 guard문 밖인 여기서도 사용 가능
}
multiplyByTen(value: 3) //30
multiplyByTen(value: nil) 
multiplyByTen(value: 10)

value가 nil이 아닐 때만 10을 곱함. nil이면 else 블록 실행.

func printName(firstName: String, lastName: String?) {
//if let
if let lName = lastName {
    print(lName, firstName)
} else {
    print("성이 없네요!")
}
//guard let
guard let lName = lastName else {
    print("성이 없네요!")
    return
}
print(lName, firstName)

printName(firstName: "길동", lastName: "홍")
printName(firstName: "길동", lastName: nil)

if~let과 guard~let 중에 guard~let으로 하면 nil일 때 바로 성이 없다고 하기 때문에 guard~let을 더 많이 씀.

디폴트 매개변수(default argument)

func sayHello(count: Int, name: String = "길동") -> String {
  return ("\(name), 너의 번호는 \(count)")
}

var message = sayHello(count:10, name:"소프트")

message = sayHello(count:100)
print(message)

message = sayHello(count:100)에서 name 값을 주지 않았기 때문에. default argument로 길동이 들어감.

func sayHello(count: Int, name: String = "길동") -> String {
  return ("\(name), 너의 번호는 \(count)")
}

var message = sayHello(count:10, name:"소프트")

print(message)

name 값을 주면 준 값으로 출력됨.

함수에서 여러 개의 결과 반환하기

func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float) {
    let yards = length * 0.0277778
    let centimeters = length * 2.54
    let meters = length * 0.0254
    return (yards, centimeters, meters)
}
var lengthTuple = converter(length:10)
print(lengthTuple)
print(lengthTuple.yards)
print(lengthTuple.centimeters)
print(lengthTuple.meters)

여러 결과 값들을 튜플로 감싸서 반환할 수 있음.

func sss(x : Int, y : Int) -> (sum : Int, sub : Int, div : Double)
{
    let sum = x+y
    let sub = x-y
    let div = Double(x)/Double(y) //같은 자료형만 연산 가능
    return (sum, sub, div)
}
var result = sss(x:10,y:3)
print(result.sum)
print(result.sub)
print(result.div)
//print(format: "%.3f", result.div) //이렇게 하면 소수점 3자리까지만 나옴.(사용하려면 import Foundation 해야 함.)

다른 자료형은 연산할 수 없기 때문에 Double형으로 바꿈.

가변 매개변수(variadic parameter)

func displayStrings(strings: String...)
{
    for string in strings {
        print(string)
    }
}
displayStrings(strings: "일", "이", "삼", "사") 
displayStrings(strings: "one", "two")

가변 매개변수를 받는다는 것을 알리기 위해 세 개의 점("...")을 사용함.
매개변수의 개수가 정해지지 않음.

func add(numbers:Int...){
    var sum:Int = 0
    for num in numbers{
        sum += num
    }
    print(sum)
}
add(numbers:1,2,3)
add(numbers:2,2,2,2)
add(numbers:1,1,1,1,1,1,1,1,1,1)
add(numbers:1,1,1,1)

call by address

var myValue = 10
func doubleValue (value: inout Int) -> Int {
    value += value
    return(value)
}
print(myValue)
print(doubleValue(value : &myValue))
print(myValue)

call by address하고 싶은 매개변수의 자료형 앞에 inout 씀.
call by address하고 싶은 변수에 &붙여서 호출

BMI 계산 결과 판정

import Foundation
let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m 
let shortenedBmi = String(format: "%.1f", bmi) 
var body = ""
if bmi >= 40 { 
    body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
    body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
    body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
    body = "정상"
} else {
    body = "저체중"
}
print("BMI:\(shortenedBmi), 판정:\(body)")

함수로

import Foundation
func calcBMI(weight: Double, height: Double) -> String {
    let bmi = weight / (height * height * 0.0001) // kg/m^2
    let shortenedBmi = String(format: "%.1f", bmi)
    var body = ""
    
    if bmi >= 40 {
        body = "3단계 비만"
    } else if bmi >= 30 && bmi < 40 {
        body = "2단계 비만"
    } else if bmi >= 25 && bmi < 30 {
        body = "1단계 비만"
    } else if bmi >= 18.5 && bmi < 25 {
        body = "정상"
    } else {
        body = "저체중"
    }
    
    return "BMI: \(shortenedBmi), 판정: \(body)"
}
print(calcBMI(weight:62.5, height: 172.3))

switch~case로

import Foundation
func calcBMI (weight : Double, height : Double) { //Void형
let bmi = weight / (height*height*0.0001) // kg/m*m 
let shortenedBmi = String(format: "%.1f", bmi) 
switch bmi {
    case 0.0..<18.5:
        print("BMI:\(shortenedBmi),판정:저체중")
    case 18.5..<25.0 :
        print("BMI:\(shortenedBmi),판정:정상")
    case 25.0..<30.0 :
        print("BMI:\(shortenedBmi),판정:1단계 비만")
    case 30.0..<40.0 :
        print("BMI:\(shortenedBmi),판정:2단계 비만")
    default :
        print("BMI:\(shortenedBmi),판정:3단계 비만") 
    }
}
calcBMI(weight:62.5, height: 172.3)

 

반응형

'iOS' 카테고리의 다른 글

iOS - 클래스  (1) 2024.10.16
iOS - first class object, first class citizen(1급 객체, 1급 시민)  (0) 2024.10.14
iOS - 함수(1)  (0) 2024.10.04
iOS - 연산자와 옵셔널  (1) 2024.09.25
iOS-2차시  (0) 2024.09.11
Comments