choco5958
지마의 개발일기
choco5958
전체 방문자
오늘
어제
  • 전체보기 (46)
    • 개발 (34)
      • Java (0)
      • JavaScript (7)
      • Php (4)
      • Ios(Swift) (23)
    • 프론트엔드 (7)
      • Html (1)
      • Css (5)
    • 백엔드 (0)
      • Mysql (0)
      • Oracle (0)
      • MongoDB (0)
    • 서버 (2)
      • Linux (2)
    • 일상 (3)
      • 반려동물 (1)
      • 베이킹 (2)
      • 맛집 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • ios#swift#스위프트#클로저#애플#아이폰
  • php#linux#soap#리눅스
  • ios#swift스위프트#애플#아이폰#클래스#구조체
  • 자바스크립트#javascript#js#개발#웹개발
  • ios#swift#스위프트#조건문#아이폰#애플
  • php#500error
  • ios#swift#스위프트#프로퍼티#애플#아이폰
  • ios#swift#스위프트#아이폰#애플#타입캐스팅
  • ios#swifth#스위프트#열거형#아이폰#애플
  • ios#swift#스위프트#구조체#문법#애플#아이폰
  • ios#swift#스위프트#아이폰#애플#함수
  • ios#swift#스위프트#아이폰#클래스#애플
  • ios#swift#스위프트#애플#아이폰
  • swift#ios#스위프트#애플#아이폰#init#초기화구문
  • ios#swift#스위프트#아이폰#애플#상속
  • ios#swift#스위프트#아이폰#애플#프로토콜
  • ios#swift#스위프트#아이폰#애플#옵셔널체이닝
  • ios#swift#스위프트#애플#아이폰#assert#guard
  • ios#swift#스위프트#애플#아이폰#try-catch#오류처리
  • ios#swift#스위프트#애플#아이폰#고차함수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
choco5958

지마의 개발일기

개발/Ios(Swift)

IOS 스위프트(Swift) 문법 - 타입캐스팅

2021. 8. 19. 23:05

타입 캐스팅이란?

인스턴스의 타입을 확인하거나 어떠한 클래스의 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 취급하는 방법입니다.

 

타입 캐스팅 연산자로 is, as를 이용하여 구성합니다.

 

class MediaItem {
    var name: String
    init(name: String) {
        self.name = name
    }
}

class Movie: MediaItem {
    var director: String
    init(name: String, director: String) {
        self.director = director
        super.init(name: name)
    }
}

class Song: MediaItem {
    var artist: String
    init(name: String, artist: String) {
        self.artist = artist
        super.init(name: name)
    }
}

let library = [
    Movie(name: "기생충", director: "봉준호"),
    Song(name: "Butter", artist: "BTS"),
    Movie(name: "올드보이", director: "박찬욱"),
    Song(name: "Wonderwall", artist: "Oasis"),
    Song(name: "Rain", artist: "이적")
]

var movieCount = 0
var songCount = 0

for item in library {
    if item is Movie {
        movieCount += 1
    } else if item is Song {
        songCount += 1
    }
}

print("Media library contains \(movieCount) movies and \(songCount) songs")  //"Media library contains 2 movies and 3 songs\n"


//형을 변환할 수 있는 다운캐스팅, 특정 클래스 타입의 상수 또는 변수는 하위클래스 인스턴스에 참조가능
for item in library {
    if let movie = item as? Movie {
        print("Movie: \(movie.name), dir. \(movie.director)")  //Movie: 기생충, dir. 봉준호, Movie: 올드보이, dir. 박찬욱
    } else if let song = item as? Song {
        print("Song: \(song.name), by \(song.artist)")  //Song: Butter, by BTS, Song: Wonderwall, by Oasis, Song: Rain, by 이적
    }
}

'개발 > Ios(Swift)' 카테고리의 다른 글

IOS 스위프트(Swift) 문법 - 프로토콜  (0) 2021.08.25
IOS 스위프트(Swift) 문법 - assert와 guard  (0) 2021.08.23
IOS 스위프트(Swift) 문법 - 상속  (0) 2021.08.19
IOS 스위프트(Swift) 문법 - 클래스와 구조체의 차이  (0) 2021.08.19
IOS 스위프트(Swift) 문법 - 프로퍼티  (0) 2021.08.17
    '개발/Ios(Swift)' 카테고리의 다른 글
    • IOS 스위프트(Swift) 문법 - 프로토콜
    • IOS 스위프트(Swift) 문법 - assert와 guard
    • IOS 스위프트(Swift) 문법 - 상속
    • IOS 스위프트(Swift) 문법 - 클래스와 구조체의 차이
    choco5958
    choco5958
    안녕하세요. 개발 및 일상 팁 들을 포스팅하는 블로그입니다.

    티스토리툴바