iOS_Swift/2021 강의실습

optional, for in, if else 사용(수업 실습)

chozjjae 2021. 9. 17. 14:40

옵셔널

옵셔널 변수 안에 값이 있으면 옵셔널로 래핑(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)