iOS Third Class

상수가 생성 될 때 초기값이 필요하다는 것은 아니며 호출 되기 전에 초기값을 넣어주면 문제 없음.

옵셔녈 바인딩은 옵셔널 을 언래핑 하는 방법


// 1. 옵셔널 변수 선언: 값이 있을 수도 있고 없을 수도 있는 변수를 선언합니다.
var username: String? = "JohnDoe"  // "JohnDoe"라는 값을 할당

// 2. 옵셔널 변수에 값이 있는지 확인하고, 값이 있을 경우 안전하게 해제하는 방법
if let unwrappedUsername = username {
    // 옵셔널에 값이 있을 경우, unwrappedUsername 상수에 안전하게 값을 할당
    print("사용자 이름은 \(unwrappedUsername)입니다.")  // "사용자 이름은 JohnDoe입니다." 출력
} else {
    // 값이 없을 경우 실행되는 코드
    print("사용자 이름이 없습니다.")
}

// 2-1. 옵셔널 변수에 값이 있는지 확인하고, 해제하는 방법
if username != nil{
    print("사용자 이름은 \(unwrappedUsername)입니다.")
} else {
    print("사용자 이름이 없습니다.")
}


// 3. 옵셔널 변수에 nil 값을 할당하여 값을 없애는 예
username = nil  // 옵셔널 변수에 nil을 할당하여 값 없앰

// 4. 값이 없을 경우 처리하기 위해 옵셔널 바인딩을 다시 사용
if let unwrappedUsername = username {
    print("사용자 이름은 \(unwrappedUsername)입니다.")
} else {
    print("사용자 이름이 없습니다.")  // "사용자 이름이 없습니다." 출력
}
import Foundation

// 암시적 추출 옵셔널(Int!)을 사용하는 예제
struct Person {
    var name: String
    var age: Int!  // 암시적 추출 옵셔널로 선언
}

func printPersonInfo(person: Person) {
    // 'age'는 Int!이므로 명시적 언래핑 없이 바로 접근할 수 있습니다.
    // 하지만 'age'가 nil일 경우 런타임 에러가 발생할 수 있습니다.
    print("\(person.name) is \(person.age) years old.")
}

// 'age'가 nil일 경우 런타임 에러가 발생할 수 있습니다.
let person1 = Person(name: "Alice", age: 25)  // 'age'는 값이 있음
let person2 = Person(name: "Bob", age: nil)   // 'age'는 nil

// 올바른 동작 (age가 값이 있음)
printPersonInfo(person: person1)  // 출력: Alice is 25 years old.

// 잘못된 동작 (age가 nil인 경우 런타임 에러 발생)
printPersonInfo(person: person2)  // 런타임 에러 발생!