let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
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:\(bmi), 판정:\(body)")
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*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 = "저체중"
}
return "BMI:\(shortenedBmi), 판정:\(body)"
}
print(calcBMI(weight:62.5, height: 172.3))
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)
import Foundation
func calcBMI(weight : Double, height : Double) -> String {
let bmi = weight / (height*height*0.0001) // kg/m*m
let shortenedBmi = String(format: "%.1f", bmi)
var body = ""
switch bmi {
case 0.0..<18.5:
body = "저체중"
case 18.5..<25.0:
body = "정상"
case 25.0..<30.0:
body = "1단계 비만"
case 30.0..<40.0 :
body = "2단계 비만"
default :
body = "3단계 비만"
}
return "BMI:\(shortenedBmi), 판정:\(body)"
}
print(calcBMI(weight:60.0, height: 170.0))
Swift는 함수를 데이터 타입처럼 처리할 수 있음
다음과 같이 함수를 상수 또는 변수에 할당하는 것이 가능
func inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
함수를 호출하려면 원래의 함수 이름 대신에 상수 이름을 이용하여 호출 가능
print(inchesToFeet(inches:10))
print(toFeet(10)) //주의 : 매개변수명(inches:) 안씀
func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}
let toUp = up //1) 변수에 저장할 수 있다.
print(up(num:10))
print(toUp(10))
let toDown = down //1) 변수에 저장할 수 있다.
print(down(num:10))
print(toDown(10))
func upDown(Fun: (Int) -> Int, value: Int) { //2) 매개변수로 전달할 수 있다.
let result = Fun(value)
print("결과 = \(result)")
}
upDown(Fun:toUp, value: 10) //toUp(10)
upDown(Fun:toDown, value: 10) //toDown(10)
func decideFun(x: Bool) -> (Int) -> Int { //3) 리턴값으로 사용할 수 있다.
//매개변수형 리턴형이 함수형
if x {
return toUp
} else {
return toDown
}
}
let r = decideFun(x:true) // let r = toUp
print(type(of:r)) //(Int) -> Int
print(r(10)) // toUp(10)
let r1 = decideFun(x:false) // let r = toUp
print(type(of:r1)) //(Int) -> Int
print(r1(10)) // toUp(10)
func add(x: Int, y: Int) -> Int {
return(x+y)
}
let add1 = {(x: Int, y: Int) -> Int in
return(x+y)
}
print(type(of:add1))
print(add(x:10,y:20))
print(add1(10,20))
// print(add1(x :10,y:20)로 쓸경우? error: closure expression is unused
//
(Int, Int) -> Int
30
30
func someFun(cl: () -> Void) {
} // trailing closure를 사용 안하면 someFun(cl: { //closure’s body }) // trailing closure 사용 하면 someFun() { //trailing closure's body goes here }
아래 코드를 단계별로 축약해보자( + 후행클로저 축약)
let add = {(val1: Int, val2: Int) -> Int in
return val1 + val2
}
var result = add(10, 20)
//print(result)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
result = math(x: 10, y: 20, cal: add)
// print(result)
result = math(x: 10, y: 20, cal: {(val1: Int, val2: Int) -> Int in
return val1 + val2
})
print(result)
// 실행결과 : 30
1차축약
let add = {(val1: Int, val2: Int) -> Int in
return val1 + val2
}
var result = add(10, 20)
//print(result)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
result = math(x: 10, y: 20, cal: add)
//print(result)
result = math(x: 10, y: 20, cal: {(val1: Int, val2: Int) in
return val1 + val2
}) //리턴형 생략
print(result)
// 실행결과 : 30
후행클로저는?
result = math(x: 10, y: 20) {(val1: Int, val2: Int) in
return val1 + val2
} // trailing closure, 리턴형 생략
print(result)
2차축약
let add = {(val1: Int, val2: Int) -> Int in
return val1 + val2
}
var result = add(10, 20)
//print(result)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
result = math(x: 10, y: 20, cal: add)
//print(result)
result = math(x: 10, y: 20, cal: {
return $0 + $1
}) //매개변수 생략하고 단축인자(shorthand argument name)사용
print(result)
// 실행결과 : 30
후행클로저는?
result = math(x: 10, y: 20) {
return $0 + $1
} //trailing closure, 매개변수 생략하고 단축인자사용
print(result)
3차축약
let add = {(val1: Int, val2: Int) -> Int in
return val1 + val2
}
var result = add(10, 20)
//print(result)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
result = math(x: 10, y: 20, cal: add)
//print(result)
result = math(x: 10, y: 20, cal: {
$0 + $1
}) //클로저에 리턴값이 있으면 마지막 줄을 리턴하므로 return생략
print(result)
// 실행결과 : 30
후행클로저는?
result = math(x: 10, y: 20) { $0 + $1 } //return 생략
print(result)
클래스로부터 만들어진 객체를 인스턴스라 한다.
https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
class 새로운 클래스 이름 : 부모 클래스 {
// 프로퍼티
// 인스턴스 메서드
// 타입(type) 메서드(클래스 메서드)
}
https://docs.swift.org/swift-book/LanguageGuide/Properties.html
class Man{
var age : Int = 1 //stored property는 초기값이 있어야 함
var weight : Double = 3.5
}
class Man{
var age : Int? //stored property는 초기값이 있어야 함, nil
var weight : Double!
}
https://docs.swift.org/swift-book/LanguageGuide/Methods.html
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){ //인스턴스 메서드
print("나이=(age), 몸무게=(weight)")
}
}
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
var kim : Man = Man()
kim.display() // 인스턴스 메서드는 인스턴스가 호출
print(kim.age)
출처:iOS프로그래밍기초 (22-2학기)한성현교수님 강의 내용 변형 및 요약 6주차