iOS

[Swift] プロトコルを弱参照するために

投稿日:

はじめに

こんにちはsuzukiです。久しぶりにSwiftの記事を投稿します。
アーキテクチャの都合上仕方ないのですが、プロトコルだらけのコードを読んでます。

プロトコルとは

手順書とか決まりごとのような表現がされていますが、概ねその通りだと思っています。
例えばIntやStringで比較を行う際に==< を使います。
==< で比較できるのはIntとStringがComparableと言うプロトコルに準拠して作られているためです。
クラスの継承と似ているように思えますが異なります。
使用シーンの違いなどはこちらのサイトが参考になるかと思います。

    プロトコル

  • 複数のプロトコルを設定できる
  • 準拠する対象を意識せず設定できる
  • 構造体や列挙型でも利用できる
    クラス継承

  • 複数のクラスを継承できない
  • 親クラスを継承する為親のクラスを意識する必要がある
  • 構造体は継承できない

プロトコルの作成方法

プロトコルを作成するには下記のようなコードになります。

    プロトコルで宣言できる内容

  • 関数
  • インスタンスプロパティ・タイププロパティ
  • イニシャライザ
  • typealias
  • 添字付け

面積を返す関数を持つ図形プロトコルを定義すると下記のようなコードになります。

プロトコルを採用したクラス作成

作成したプロトコルを採用するには下記のように記述します。

これだけだとTriangleクラスがFigureプロトコルに準拠していないということでエラーが発生します。
Type 'Triangle' does not conform to protocol 'Figure'
Figureプロトコルでfunc culcArea() -> Floatという関数を宣言したので、プロトコルを採用したクラスでは宣言された関数を実装しなければなりません。

使用例

構造体に採用することも可能ですし、プロトコルを採用されていれば配列にまとめることも可能です。
試しに少しコードを書いてみました。

ClassOnlyProtocolとは

前の章で構造体や列挙型にもプロトコルの使用が可能と書きましたが、構造体と列挙型等に制限を行いクラスのみで設定できるプロトコルを作成する事も可能です。

メリット

こちらを使うメリットとしては、参照を渡す場合に弱参照のweakを設定できるようになります。
デリゲートなどで相手のインスタンスを参照するような場合には弱参照で保持し循環参照を防ぐことができます。

AnyObjectを指定しない場合は
'weak' must not be applied to non-class-bound 'FigureDelegate'; consider adding a protocol conformance that has a class bound
上記のようなエラーが表示されます。
エラー原因はそもそも弱参照は参照型に対してのみ定義できます。
プロトコルは参照型(クラス),値型(構造体、列挙型)全て設定できるため、weakを設定しているのに値型が入る可能性があります。

使用例

最後に

プロトコルの設定方法をまとめさせていただきました。
プロトコルの拡張は複雑になっているため、また今度改めてまとめられたらと思っております。

おすすめ書籍

詳解 Swift 第4版  リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)  よくわかるAuto Layout iOSレスポンシブデザインをマスター

page_footer_300rect




page_footer_300rect




-iOS
-

執筆者:


comment

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

CAPTCHA


関連記事

swift

[Swift]Schemaを使用してURLの接続先を切り替える

1 はじめに2 XCodeのBuildConfigurationとは3 スキーマとは4 スキーマの追加方法5 スキーマの設定変更6 開発と本番で異なる通信の接続先を設定する7 さいごに はじめに はじ ...

swift

[Swift]iPadのActionSheet表示でクラッシュする問題

1 はじめに2 エラー内容2.1 エラー原因2.2 まだこれで解決ではない3 さいごに はじめに こんにちは、nukkyです。 私は普段iPhoneアプリの開発を主に行っているのですが 慣れか油断かi ...

swift

UnboxとWrapでデータを永続化する

1 はじめに1.1 ライブラリの紹介1.2 前提条件2 事前準備3 実装3.1 データの準備3.2 設定データをテキストファイルに出力する3.3 設定データの読み込み4 さいごに はじめに 設定ファイ ...

swift

Swiftでシェア機能や外部アプリ起動の導線を簡単に実装できるライブラリ「SwiftShareBubbles」

1 はじめに2 準備3 実装3.1 表示3.2 用意されているパターン4 さいごに はじめに こんにちは、nukkyです。 今回はSNSでのシェア機能や外部アプリ起動の導線を追加したいときに 簡単に実 ...

[Swift]アプリのフォアグラウンドに特定の処理を行う。

1 はじめに2 今回の目標3 画面構成4 通知の設定4.1 通知の送信4.2 通知の受信と削除-BaseController5 それぞれの画面の設定5.1 初期画面(FirstViewControll ...

フォロー

follow us in feedly

page_side_300rect

2018年11月
« 10月   12月 »
 123
45678910
11121314151617
18192021222324
252627282930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。

Web版MyCoach

私たちはより広い方にコーチングを知ってもらいたいと考えています。 下記のサイトにて、コーチの方々を紹介しておりますので、よろしければご覧ください。