ptional (선택적인)
변수에 값이 있을 수도, 없을 때도 있기 때문에 존재한다
(값을 저장 or 값이 없음)
Ex) var Whoami : int = 10 //결과 값 Int Type을 가진 10
var Whoamme : int? = 10 //결과 값 Optional Int Type을 가진 Optional(10)
var Whoru : int! //결과 값 nil(초기값을 주지 않았기 떄문)
var Whoru : int? //결과 값 nil(초기값을 주지 않았기 떄문)
(Optional)Data Type Change (형변환)
값을 지정하고 변환하고자 하는 Type을 쓴 후 값을 감싸준다
print (Int(“345”)) //Optional(345)
Int형이 아닌 값을 변환시 nil 값을 출력함
print (Int(“wassp”) //nil
print (Int(“3.4”) //nil
Forced Unwrapping(강제 언래핑)
Optional Int 되어있는 값을 Int형으로 변경함 [변수명!]
var a : Int? //초기 값이 없으니 nil
a = 10 //초기 값이 있으니 Optional(10)
print(a!) //강제 언래핑을 해서 10
a = a! + 2 //Optional(12)
Forced Unwrapping(강제 언래핑) optional binding
언래핑 두 번째 방법
if let constname = optional
{ 변수의 값이 있으면 상수 [constname]에 대입 후 if문 실행
변수의 값이 없으면 if문의 조건이 거짓임으로 실행 x }
if var constname = optional
{ 변수의 값이 있으면 변수 [constname]에 대입 후 if문 실행
변수의 값이 없으면 if문의 조건이 거짓임으로 실행 x }
var constname : Int?
constname = 10
if let constname1 = constname
{ print(constname1,constname)} //10 Optional(10)
여러 옵셔널을 언래핑 시 콤마 사용
var person : String?
var human : String?
person = “ju”
human = “jang”
if let p = person, let h = human
(, == and)
{ print(p, h) } //ju jang (if let을 통해 언랩핑)
else { print(“nil”) }
let z : Int! = 1 //Optional(1)
let y : Int = z //자동 unwrap 1
let x : Int = a! //unwrap 1
let u = z //Optional(1) unwrap을 하지 않아도 된다고 판단
let b = z + 1 //2 (unwrap 후 + 1)
Optional 사용하는 이유 : 값이 없든 있든 처리하기 위해
형 변환
UpCasting, DownCasting
상속 관계가 있는 클래스들만 형 변환 가능
자식인스턴스 →(as) 부모클래스 (UpCasting, 자식이 추상화)
부모인스턴스 →(as!) 자식클래스 (DownCasting, 확신이 있을 때)
부모인스턴스 →(as?) 자식클래스 (DownCasting, 확신이 없을 때)
6. 연산자 (연산을 수행하는 기호)
a = b //(b의 값을 a로 할당)
var b = 10 //(10을 b에 할당)
a = a + 1 //a 변수의 값을 1 증가
a = a - 1 //a 변수의 값을 – 감소
비교 연산자
a == b //a와 b 값이 같은지 true
a > b //a가 b보다 큰지 true
a >= b //a가 b보다 크거나 같던지 true
a != b //a,b 가 같지 않다면 true
범위 연산자
a...b //a부터 b까지
10...15 //10부터 15까지
a..<b //a부터 b 포함 전까지
5..10 //5부터 10포함 전인 9까지
7. Nil-Coalescing Operator (Nil 합병연산자) ??
let realAge = 1
var age : Int? //Optional
age = 23 //Optional(23)
var AAggee = age ?? realAge
//age이 nil 아니면 age Unwrap 후 출력
//age가 nil이면 realAge를 출력
print(AAggee) //23
8. 제어문
For 문
for [변수명] in [반경]
for I in 1...3
{ print(I) }
결과 값
1
2
3
문자열 For 문
let human = [“arm” : 2, “brain” : 1]
for (a, b) in human
{ print(“\(a) have \(b) have”) }
While 문
For문과 비슷한 반복문으로 지정된 조건이 만족시까지 반복
만약 print(myCount)를 while 문 내에 넣을 시 0부터 1000까지
출력 된다
Repeat...While
while은 조건이 만족시 바로 종료되지만 Repeat는 최소 1회는
실행 후 조건을 확인한다
For And If
for문 중간에 조건식 If문을 사용해 중간에 중지(break)를 함
break를 중괄호 { }로 덮어줘야 실행 가능
for I in 1...5
{ if I > 3 {break}
print (I)
}
결과값
1
2
3
Continue 문 (이 후 모든 코드를 건너 뛴 후 상단으로 위치)
for I in 1...10 {
if I % 3 == 0 { continue } print (i) }
결과 값 1,2,4,5,8,10
If문 , &&
If문 내에서 조건식 ,와 &&는 and를 의미하기 때문에
두 값이 참일 시 값이 나옴
Switch-case 과제) 다중 If-else문 변형