Paul [email protected] May28th2020

Xcode12.5用に更新

型キャストを使用すると、Swiftに型Aと思われるオブジェクトが実際に型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から継承するため、Swiftは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)") }}

ご覧のとおり、最初にpersonCustomerに変換し、次にEmployeeに変換しようとします。 いずれかのテストが合格した場合、そのクラスに属する余分なプロパティと、親クラスのnameプロパティを使用できます。

型キャストはSwiftでは特に眉をひそめるわけではありませんが、型キャストを繰り返すと、コードに根本的な問題がある可能性があると言います。 具体的には、Swiftはどのデータを使って作業しているのかを理解しているときに最適ですが、型キャストは効果的にSwiftに「あなたよりも多くの情報を知っています。「その情報をSwiftに伝える方法を見つけて、それを理解することができれば、それは通常よりうまくいきます。

Swiftを使ったハッキングは、RevenueCatが後援しています

後援していますアプリ内購読インフラストラクチャの構築と維持は困難です。 幸いなことに、より良い方法があります。 RevenueCatを使用すると、数ヶ月ではなく数時間でアプリのサブスクリプションを実装できるため、アプリの構築に戻ることができます。

無料で試してみてください

Swiftでハッキングをスポンサーし、世界最大のSwiftコミュニティに到達!

コメントを残す

メールアドレスが公開されることはありません。