optional, for in, if else 사용(수업 실습)
옵셔널
옵셔널 변수 안에 값이 있으면 옵셔널로 래핑(wrapped)되었다고 한다.
optional(10)
Int? or Int!로 써줘야한다.
nil = 값이 없는 형태 *
옵셔널 변수에 초기값을 10으로 주면
option(10)으로 표시, 해당 자료가 들어가거나
초기값을 주지 않으면
nil 표시, 자료가 없으면 nil 표시
var cho : Int = 10
var jo : Int? = 10
var y : Int?
var kim : Int! = 10
var k : Int!
print(cho) //10
print(jo) //optional(10)
print(y) //nil
print(kim) //optional(10)
print(k) //nil
------------------------------------------------------------------------------------------------
옵셔널에 래핑된 값은 강제 언래핑(forced nuwrapping변수 뒤에 ! 붙여주기)로 풀어준다
var cho : Int? = 10
var jo = 10
print(cho) //optional(10)
print(cho!) //10
print(jo) //10
==========================================================
var cho : Int? = 10
print(cho) //optional(10)
var jo = 10
print(jo) //10
var kim = 0 //kim에대한 초기값을 지정하지 않으면 오류가 발생
print(kim)
//print(cho + 2) //오류
print(cho! + 2) //10
cho = cho! + 2
print(cho) //optional(12)
//kim = cho
//print(kim) //오류
kim = cho!
print(kim) //12
=======================================================
var cho : Int? = 10
if cho != nil{ //반드시 변수와 != 사이에 띄어쓰기 넣기
print(cho!)
}
else {
print("nil") //10
}
var jo : Int!
if jo != nil{
print(jo!)
}
else{
print("nil") //nil
}
====================================================
optional binding
//optional binding(옵셔널바인딩)
var cho : Int? = 10
if let c = cho{
print(cho,c)
}
else{
print("nil")
}
var jo : Int?
if let j = jo{
print(jo,j)
}
else{
print("nil")
}
=====================================================
var cho : Int?
var jo : Int?
cho = 180
jo = 78 //하나라도 주석처리 된다면 nil처리
if let c = cho, let j = jo{
print(cho,jo)
print(c,j)
}
else{
print("nil")
}
=====================================================
var cho : String?
var jo : String?
cho = "Hello"
jo = "Hi"
if let c = cho, let j = jo{
print("\(cho),\(jo)")
print(c,j)
}
======================================================
옵셔널 변수 선언방법
? 와 ! 의 차이점
자료형에 Int? 가 쓰였다면 다른변수와 만났을때 실행이 불가능하지만
자료형에 Int! 가 쓰였다면 다른자료형과 만났을때 그 자료형을 따라가게 된다.
ex)
var a : Int! = 10
var b : Int = a
print(a,b)
var c : Int = a!
print(c)
var d = a
print(d)
var e = a + 1
print(e)
print(type(of:a),type(of:b),type(of:c),type(of:d))
==================================================
클래스로부터 만들어진 객체를 인스턴스라 한다.
(객체안에 있는 메모리가 인스턴스)
downcasting
부모 인스턴스 -> as! -> 자식 클래스 //변환과정에서 확신이 있을때
부모 인스턴스 -> as? -> 자식 클래스 //변환과정에서 확신이 없을때
as?를 사용하게 되면 바인딩을 한번 더 작업
upcasting (downcasting의 반대)
자식 인스턴스 -> as -> 부모 클래스
타입 검사 is
지정된 객체 어떤클래스의 타입인지 검사할때 사용
===================================================
let names = ["a","b","c","1","2"]
for n in names[0...]{
print(n) //0번째 자리부터 끝까지 출력
} // 배열
====================================================
let defaultAge = 1
var age : Int?
print(age) //
var myAge = age ?? defaultAge
//앞에 값이 없으면 뒤에 값을 쓰게끔
print(myAge)
============================================================
let red = "Red"
var color : String?
var cho = color ?? red
print(cho) //Red출력
==============================================================
var cho = ["cho": 24, "kim": 23, "lee":20]
for (s,m) in cho{
print("\(s),\(m)") //lee,20 kim,23 cho,24
}
===========================================================
var i = 10
repeat{
i -= 1
print(i)
} while (i>8) //9,8
===================================================
for i in 1...10{
if i > 6{
break
}
print(i) //1~6
}
========================================================
for i in 1...10{
if i % 2 == 0{
continue //뛰어넘어라
}
print(i) //1~6
}
===================================================
var cho = 24
var jo = 20
var kim = 1
var k = 2
if cho > jo{
print("cho win") //cho win
}
if cho>jo && k>kim{ //두 조건문 비교에서 ,는 and(&&)로 적용
print("cc") //cc 출력
}
if cho>jo, k<kim{ //두 조건문 비교에서 ,는 and(&&)로 적용
print("cc") //cc 출력
}
else{
print("xx")
}
=========================================================
let weight = 78.0
let height = 180.0
let bmi = weight / (height*height*0.0001)
var body = " "
if bmi < 18.5 {
print("저체중")
body = "저체중"
}
else if bmi >= 18.5 && bmi < 25 {
print("정상")
body = "정상"
}
else if bmi >= 25 && bmi < 30 {
print("1단계 비만")
body = "비민"
}
else if bmi >= 30 && bmi < 40 {
print("2단계 비만")
body = "고도비만"
}
else {
print("3단계 초초 비만")
body = "초고도비만"
}
print(bmi, body)