일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Timer
- App Store Connect
- weak var
- dispatchsource
- Required Reason API
- Protocol
- weatherKit
- swift
- CLLocationManagerDelegate
- SwiftUI Boolean 값
- Startign Assignments
- MKMapViewDelegate
- 러닝타이머
- CoreLocation
- 단일 책임원칙
- AnyObject
- UICollectionViewFlowLayout
- RunningTimer
- addannotation
- 서체관리자
- xcode로 날씨앱 만들기
- WeatherManager
- Xcode
- 영문 개인정보처리방침
- 클로저의 캡슐화
- MKMapItem
- 러닝기록앱
- font book
- UIAlertAction
- 한국어 개인정보처리방침
- Today
- Total
VesselWheel
Optional type 선언(?), 해제(!) 본문
import UIKit
/*
Optional (옵셔널)
Int type
Optional Int type
*/
// Int type 의 값 할당하기
var n1: Int = 10
// Optional Int type 의 값 할당하기
// ㄴ Int type 의 값을 할당하거나
// 아무 값도 할당되지 않은 상태(nil)
var n2: Int? = 20
var n3: Int!
var n4: Int! = 40
print(n1)
print(n2)
// 갑을 할당하지 않으면 자동으로 nil 로 설정됨
print(n3)
print(n4)
print(Int(100))
print(100)
// Optional(1234)
print(Int("1234"))
// 값을 사용하려면 Optional 을 풀어줌 : !
// 1234
print(Int("1234")!)
// 숫자모양의 문자열이 아니면 nil 로 출력됨
// 값을 반환할 때 오류가 발생할 가능성이 있는 값은
// Optional type 이라는 객체로 감싸서 반환함
// print(Int("swift"))
// swift 에서 기본자료형(Int, Double, String ...)
// 들은 nil 값을 저장할 수 없음
// nil 을 저장하려면 Optional type 으로 선언해야 함
// 아래의 n5 는 정수나 nil값 모두 할당받을 수 있음
var n5: Int?
var n6: Int?
var n7: Int = 70
print(n6)
print(n7)
var n8: Int? = 80
print(n8)
print(n8!)
n8 = n8! + 100
print(n8)
print(n8!)
var n9: Int = 90
print(n9)
// n8! <-- forced unwrapping
n9 = n8!
print(n9)
print("-----------------")
var n10: Int?
n10 = 10
if n10 != nil{
print(n10!)
}else{
print("nil")
}
var n11: Int?
if n11 != nil{
print(n11!)
}else{
print("nil")
}
print("-----------------")
var n12: Int?
n12 = 12
// if let n12_1 = n12 에서 ! 를 사용하지 않아도
// n12(Optional(12)) 가 unwrapping 이 됨
// Optional Binding
if let n12_1 = n12{
print(n12, n12_1)
}else{
print("nil")
}
print("-----------------")
var n13: Int?
n13 = 13
// swift 5.7 부터 n13_1 = n13 이라고 하지 않아도
// unwrapping 이 됨
if let n13{
print(n13)
}else{
print("nil")
}
// n14 에 n13_1=n13 같이 값을 할당하지 않으면
// n14 는 nil 이 됨
var n14: Int?
if let n14{
print(n14)
}else{
print("nil")
}
/*
여러 Optional 변수를 한꺼번에 unwrapping 하기
ㄴ , (comma) 사용
*/
var fruit1: String?
var fruit2: String?
fruit1 = "strawberry"
fruit2 = "melon"
if let fruit1, let fruit2{
print(fruit1, fruit2)
}else{
print("nil")
}
var number1: Int?
var number2: Int?
number1 = 11
number2 = 22
if let number1, let number2{
print(number1, number2)
}else{
print("nil")
}
/*
Optional 선언 : ?
Optional 해제 : !
Optional 에 값이 할당되어 있는 것이 보장된 경우,
ㄴ nil 이 아닌 것이 보장된 경우
implicity unwrapped (묵시적(암묵적) 언래핑)
자동
ㄴ 이 경우, 강제 언래핑이나 Optional Binding
을 하지 않아도 값에 접근할 수 있도록 함
ㄴ 암묵적 언래핑 Optional로 선언하려면
선언부에서 ! 를 사용함
*/
var n15: Int? = 10
var n16: Int = n15!
var n17 = n15
// Optional(10) 10 Optional(10)
print(n15, n16, n17)
// Implicity Unwrapped Optional 선언하기
var n18: Int! = 22
// 자동으로 unwrapping 됨
var n19: Int = n18
// ! 을 사용해서 명시적(expliity) unwrapping 함
var n20: Int = n18!
// type 추론에 의해서 n21 도 n18 과 같이 Optional 로 인식함
var n21 = n18
// n18 은 ! 을 사용해서 선언했으므로
// 연산할 때 자동으로 unwrapping 됨
var n22 = n18 + 10
print(n18, n19, n20, n21, n22)
'Xcode Study' 카테고리의 다른 글
Nil Coalescing Operator : ??(nil 병합연산자) (0) | 2023.10.14 |
---|---|
Optional(?) Binding (0) | 2023.05.03 |
While loop 계속(반복조건) (0) | 2023.05.02 |
UIkit에서 나머지값(%)을 활용한 구구단 예제 (0) | 2023.05.02 |
While문의 loop 형성 (0) | 2023.05.02 |