2016-07-17 14 views
-1

プロトコル内で宣言/宣言された関数引数ラベル(関数パラメータ名とは対照的)スイフトプロトコル宣言:引数ラベル?

または、それは常に採用タイプおよび/または拡張で行われていますか?

+0

eggzachery!ありがとうございました! – SKOOP

+0

私は答えにコメントし、説明を追加しました。 – Moritz

+1

あなたの答えは素晴らしいです! – SKOOP

答えて

1

プロトコルを宣言するときは、関数のパラメータを宣言する必要があります。これは、あなたの関数に、後でではなく、いくつのパラメータがあるかを選択するときです。


プロトコルは契約のようです。バインディング部分は、使用する前にすでに決定されています。

オブジェクトがプロトコルに準拠している場合は、宣言したときにその関数を使用する必要があります。パラメータを追加/変更/削除するオプションはありません。

protocol Juggling { 

    func juggle(object: String, number: Int) 

    func launch(object: String, howMany number: Int) 

} 

プロトコルに準拠したオブジェクトは、それらが宣言されているなどの機能を使用する必要があります:例えば、このようなプロトコルで

struct Juggler: Juggling { 

    let name: String 

    func juggle(object: String, number: Int) { 
     print("Juggling \(number) x \(object)") 
    } 

    func launch(object: String, howMany number: Int) { 
     print("Launching \(number) x \(object)") 
    } 

} 

そして、発信者側のあなたは

let joe = Juggler(name: "Joe") 
joe.launch(object: "baton", howMany: 2) 
joe.juggle(object: "ball", number: 5) 

たとえば、を使用することはできませんメソッドでは、呼び出し元側の「howMany」ではなく「number」を使用するため、プロトコルに準拠しなくなりました。

プロトコル拡張を使用する場合には、同じルールです:たとえば

protocol Juggling { 

    func juggle(object: String, number: Int) 

    func launch(object: String, howMany number: Int) 

} 

extension Juggling { 

    func juggle(object: String, number: Int) { 
     print("Juggling \(number) x \(object)") 
    } 

    func launch(object: String, howMany number: Int) { 
     print("Launching \(number) x \(object)") 
    } 

} 

struct Juggler: Juggling { 

    let name: String 

} 

let joe = Juggler(name: "Joe") 
joe.launch(object: "baton", howMany: 2) 
joe.juggle(object: "ball", number: 5) 

あなたの代わりに、発信者側の

joe.launch(object: "baton", howMany: 2) 

joe.launch(object: "baton", number: 2) 

を使用しようとすると、Xcodeのでしょう実際にはfix-itとパラメータ名を置き換える提案を示します。

関連する問題