투케이2K

92. (swift/xcode) as 키워드 사용해 캐스팅 수행 및 as? 옵셔널 데이터 출력 , as! 데이터 강제 추출 실시 본문

Swift

92. (swift/xcode) as 키워드 사용해 캐스팅 수행 및 as? 옵셔널 데이터 출력 , as! 데이터 강제 추출 실시

투케이2K 2022. 8. 16. 08:44

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

    // MARK: - [테스트 함수 정의]
    func testMain(){
        print("")
        print("===============================")
        print("[ViewController >> testMain() :: 테스트 함수 수행]")
        print("===============================")
        print("")
        
        
        /*
         [요약 설명]
         1. as : swift 에서 캐스팅을 수행합니다
         2. as? : 캐스팅에서 옵셔널 값을 반환합니다 (if let 구문과 연계 가능)
         3. as? 는 캐스팅을 성공하면 옵셔널 값을 반환하고 실패하면 nil 을 반환합니다
         4. as! : 캐스팅에서 값을 강제 추출합니다 (런타임 에러 발생 가능)
         5. as! 는 캐스팅에서 실패하면 런타임 에러가 발생할 수 있습니다
         6. 옵셔널(Optional) 은 데이터가 있을 수도 있고, 없을 수도 있다는 의미입니다
         7. as 를 사용해 캐스팅을 수행할 때 성공에 대한 확인이 있는 경우 as! 를 사용하며, 아닌 경우 as? 를 사용하는게 좋습니다
         8. if let : Optional 값이 nil인지 확인하고 분기 처리 작업을 수행합니다
         9. if let 구문에서 데이터가 Optional 인 경우는 if 문에서 벗김 처리 , nil 인 경우 else 구문에서 예외 처리를 수행합니다
         10. guard let : 조건이 true 인 여부를 검사합니다
         11. guard let 구문에서 조건이 true 인 경우 guard let 구문을 수행하고 , false 인 경우 else 구문에서 예외 처리를 수행합니다
         12. guard let 은 else 즉, 조건이 false 일 때 블럭을 종료하는 함수가 필요합니다 (break, return ... )
         */

        
        
        // [초기 변수 선언 실시]
        var stringData = "TWOK"
        var optionalData : String?
        var nilData : String? = nil
        var intData : Int = 10
        
        
        // [데이터 삽입 실시]
        optionalData = "투케이"
        
        
        // [as? 를 사용해 캐스팅 수행 실시]
        var stringCast_1 = stringData as? String
        var optionalCast_1 = optionalData as? String
        var nilCast_1 = nilData as? String
        var intCast_1 = intData as? String
        
        
        // [as? 결과 확인 로그 출력]
        print("")
        print("===============================")
        print("[ViewController >> testMain() :: as? 캐스팅 로그 결과 출력 실시]")
        print("[stringCast_1 :: \(stringCast_1)]")
        print("[optionalCast_1 :: \(optionalCast_1)]")
        print("[nilCast_1 :: \(nilCast_1)]")
        print("[intCast_1 :: \(intCast_1)]")
        print("===============================")
        print("")
        
        
        // [as! 를 사용해 캐스팅 수행 실시]
        var stringCast_2 = stringData as! String
        var optionalCast_2 = optionalData as! String
        // var nilCast_2 = nilData as! String // MARK: [nil 캐스팅 런타임 에러 발생]
        // var intCast_2 = intData as! String // MARK: [형변환 캐스팅 런타임 에러 발생]
        
        
        // [as! 결과 확인 로그 출력 실시]
        print("")
        print("===============================")
        print("[ViewController >> testMain() :: as! 캐스팅 로그 결과 출력 실시]")
        print("[stringCast_2 :: \(stringCast_2)]")
        print("[optionalCast_2 :: \(optionalCast_2)]")
        print("===============================")
        print("")
    }
 

[결과 출력]

 

반응형
Comments