[Swift]プロトコル


契約??


プロトコルとは,ある役割のためにメソッド,プロトコルなどのフレームワークを指す.プロトコルを作成した後(フレームワークを作成した後)、構造体、クラス、列挙型は、作成したプロトコルを使用してプロトコルの要件を実現することができます.
基本形態は以下の通りである.
protocol 프로토콜명 {
    // 프로토콜 정의
}
この定義されたプロトコルを使用する方法は、次のとおりです.
struct 구조체명: 프로토콜1, 프로토콜2 {
    // 구조체 정의
}
class 클래스명: 상속받을 클래스명, 프로토콜1, 프로토콜2 {
    // 클래스 정의
}
enum 열거형명: 프로토콜1, 프로토콜2 {
    // 열거형 정의
}
上記の例のように、複数のプロトコルを同時に採用することができ、プロトコルで定義された部分を実現するだけでよい.クラスに継承クラスがある場合は、上記のクラスの例のように継承するクラスを挿入し、プロトコルを記述できます.

プロトコル定義


プロトコル内の定義は、プロトコルやメソッドなどの機能です.
プロトコルがプロトコルを要求する場合、プロトコルは常にvar(変数)キーワードを使用する必要があります.そして、後が読み取り専用なら{ get }、読み書き可能なら{ get set }と書きます.
クラスにはclassタイププロトコルとstaticタイププロトコルがあり、プロトコル内では区別されず、staticキーワードのみを使用してタイププロトコルを要求します.
protocol 프로토콜명{
    static var 프로퍼티명: 타입 { get } // 읽기 전용 타입 프로퍼티
    var 프로퍼티명: 타입 { get set } // 읽기, 쓰기 가능 프로퍼티
}
方法の要求も専門の要求と同じである.
ただし、値タイプ(構造体、列挙型)のインスタンスメソッドで内部値を変更する場合は、funcキーワードの前にmutatingキーワードを付けることができます.参照タイプのクラスでは、内部値をペーストせずに変更できます.
protocol 프로토콜명 {
    func 메서드명(매개변수)
    static func 메서드명(매개변수)
    mutating func 메서드명(매개변수)
}
アルファベットのタイリングの要求を記入することもできます.一般的には、専門家や方法のようにフレームワークを作るだけでいいです.ただし、クラスには継承があり、要件を満たすアルファベットログインを実現するには、requiredキーワードを追加して実現する必要があります.継承のためなら継承してもよいし、イニシャルタイプライターの要求に応じてイニシャルタイプライターを実現してもよいし、overrideキーワードを付けてrequired overrideまたは逆を使ってもよい.
では、finalのキーワードが付加されて継承できないクラスについては、どうすればいいのでしょうか.
もちろんrequiredのキーワードを追加する必要はありません.
protocol 프로토콜명 {
    var 프로퍼티: 타입 { get }
    init(매개변수: 타입)
}

class 클래스명A {
    init(매개변수: 타입){
    	// 생성자 정의
    }
}

class 클래스명B: 클래스명A, 프로토콜명 {
    var 프로퍼티: 타입
    
    ovrride required init(매개변수: 타입) {
    	// 생성자 정의
    }
}

協議が深化する


プロトコルはクラスのように継承することもできます.継承されたプロトコルがクラスで採用されている場合、プロトコルが継承した他のプロトコルの定義もクラスで実現されるべきです.
また、クラス専用プロトコルを作成することもできます.プロトコルの継承リストにclassのキーワードを記入すれば、クラスのみがプロトコルを採用できることを保証できます.
protocol 프로토콜A{
   func 메서드A()
}
protocol 프로토콜B: class, 프로토콜 A{
   func 메서드B()
}

class 클래스: 프로토콜B {
    func 메서드A() {
    	// 메서드 구현
    }
    func 메서드B(){
    	// 메서드 구현
    }
}