변수 또는 상수의 값이 nil일 수도 있다는 것을 의미.
(옵셔널 변수 또는 상수가 아니면 nil을 할당할 수 없음)
func checkOptionalValue(value optionalValue: Any?) {
switch optionalValue {
case .none:
print("Nil")
case .some(let value):
print("\(value)")
}
}
옵셔널 바인딩
var myName: String? = "Hee"
if let name = myName {
print("My name is \(myName)")
} else {
print("nil")
}
대문자 카멜케이스 이용
1
struct Student {
var name: String = "unknown"
var grade: String = "fresh"
static func selfIntroduce() {
print("I'm student.")
}
func selfIntroduce() {
print("I'm \(name). And I'm \(grade)")
}
}
Student.selfIntroduce()
var hee: Student = Student()
hee.name = "Hee"
hee.grade = "freshm"
hee.selfIntroduce()
2
struct Hee {
var name: String = "Hee"
var age: Int = 99
static func personType() {
print("Hee is a person.")
}
func information() {
print("My name is Hee. And I'm 99.")
}
}
var person: Hee = Hee()
Hee.personType()
person.information()
구조체와 달리 클래스의 인스턴스는 참조 타입이므로 클래스의 인스턴스를 let으로 선언해도 내부 프로퍼티 값 변경 가능.
class Hee {
var name: String = "Hee"
var age: Int = 99
var weight: Float = 99.9
}
var student: Hee = Hee()
let teacher: Hee = Hee()
student.name = "nana"
student.name // nana
teacher.name = "Ji"
teacher.name // Ji
enum Year {
case dec, jan, feb
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
func printMessage() {
switch self {
case .dec, .jan, .feb:
print("Winter")
case .mar, .apr, .may:
print("Spring")
case .jun, .jul, .aug:
print("Summer")
case .sep, .oct, .nov:
print("Fall")
}
}
}
Year.dec.printMessage()