폴 허드슨@twostraws 월 28 일 2020 년

업데이트 Xcode12.5

유형 주물게 확인할 수 있 스위프트는 객체 생각하는 입력입니다 실제로 B 형,할 때 도움이되는 작업으로 프로토콜과 클래스를 상속입니다.

당신이 보았 듯이,프로토콜은 우리가 코드를 공유 할 수 있도록 우리가 함께 그룹 공통 기능을 할 수 있습니다. 그러나,우리는 반대 방향으로 갈 필요가 몇 번–우리는 볼 수 있어야합니다”당신은 프로토콜을 준수하는 개체를 가지고,하지만 난 당신이 나를 특정 유형으로 사용할 수 있도록하고 싶습니다.”

이를 설명하기 위해 간단한 클래스 계층 구조가 있습니다:

class Person { var name = "Anonymous"}class Customer: Person { var id = 12345}class Employee: Person { var salary = 50_000}

각 속성에 대해 기본값을 사용 했으므로 이니셜 라이저를 쓸 필요가 없습니다.

우리는 그 각각의 인스턴스를 생성하고,동일한 배열에 추가 할 수 있습니다:

let customer = Customer()let employee = Employee()let people = 

CustomerEmployee모두Person에서 상속되므로 스위프트는people상수를Person배열로 간주합니다. 따라서people을 반복하면 배열의 각 항목의name에 액세스 할 수 있습니다.:

for person in people { if let customer = person as? Customer { print("I'm a customer, with id \(customer.id)") } else if let employee = person as? Employee { print("I'm an employee, earning $\(employee.salary)") }}

보시다시피person를 먼저Customer로 변환 한 다음Employee로 변환하려고합니다. 두 테스트 중 하나를 통과하면 해당 클래스에 속하는 추가 속성과 부모 클래스의name속성을 사용할 수 있습니다.

타입 캐스팅은 스위프트에서 특별히 눈살을 찌푸리지는 않지만 반복되는 타입 캐스팅은 코드에 근본적인 문제가 있음을 의미 할 수 있습니다. 보다 구체적으로,스위프트는 작업중인 데이터를 이해할 때 가장 잘 작동하며 유형 캐스트는 스위프트에게 효과적으로”나는 당신보다 더 많은 정보를 알고 있습니다.”당신이 스위프트에 그 정보를 전달하는 방법을 찾을 수 있다면 그것은뿐만 아니라 그것을 이해,그것은 일반적으로 더 잘 작동합니다.

수익캣이 후원하는 스위프트와 해킹

후원하는 인앱 구독 인프라를 구축하고 유지하는 것은 어렵습니다. 다행히도 더 좋은 방법이 있습니다. 당신은 당신의 응용 프로그램을 구축에 다시 얻을 수 있도록,시간이 아닌 달에 앱에 대한 구독을 구현할 수 있습니다.

무료로 사용해보십시오

스위프트와 해킹을 후원하고 세계 최대의 스위프트 커뮤니티에 도달!

답글 남기기

이메일 주소는 공개되지 않습니다.