as! 강제 다운 캐스팅 : 반환 Type이 일반 Type이며 실패시 런타임 오류가 발생한다.
강제 다운 캐스팅은 실패시 런타임 오류가 발생하기 때문에 사용할 때 조심해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
let furniture: Furniture=Furniture(yearOfProduction: 2018) let bed: Bed=Bed(yearOfProduction: 2016, size: "King") let chair: Chair=Chair(yearOfProduction: 2017, count: 3)
print("\(bed.yearOfProduction), \(bed.size)") // 2016, King
iflet downTest: Furniture= bed as?Furniture { print(type(of: downTest)) print(downTest.yearOfProduction) // print(downTest.size) // Value of type 'Furniture' has no member 'size' } else { print("fail") }
// Bed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
for item in wareHouse { print(type(of: item)) iflet bed = item as?Bed { print(bed.description()) } elseiflet chair = item as?Chair { print(chair.description()) } }
//이 침대의 제작시기는 2017이고, 크기는 King 입니다. //이 침대의 제작시기는 2018이고, 크기는 Single 입니다. //이 의자의 제작시기는 2018이고, 남은의자의 개수는 4 입니다. //이 의자의 제작시기는 2016이고, 남은의자의 개수는 3 입니다. //이 의자의 제작시기는 2019이고, 남은의자의 개수는 6 입니다.