도슐랭스타
iOS - 함수(2) 본문
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