2016-09-29 12 views
-1

私はSwiftを初めて習得し、この問題に遭遇しました。なぜfishy.depthに値を割り当てることができないのですか? enter image description hereスイフトで2つ以上のプロトコルを継承する

+4

*コード*を載せてください。スクリーンショットではありません。 –

+0

関数のパラメータは*定数です。あなたの意図に応じて、1) 'inout'パラメータを使うか、* 2)プロトコルを* class protocol *として定義できます(例:http://stackoverflow.com/questions/33471858/ swift-protocol-weak-can-be-apply-to-non-class-type)を使用することができます。 –

答えて

0

これは、魚がlet定数であると言いますが、その値を変更できるように魚をvarとして設定する必要があります。

+0

ありがとうございました。 –

+0

U歓迎、あなたは答えを受け入れることができますか、tnx! –

0

インスタンスを持つことはできません。プロトコルは種類のようなものです。

struct Carp: Fish, UnderWater{ 

    var fins: Int 
    var depth: Int 

    init(fins: Int) { 
     self.fins = fins 
     self.depth = 0 
    } 

    init(depth: Int) { 
     self.fins = 0 
     self.depth = depth 
    } 

} 

func surface<T: Fish & UnderWater>(t: inout T){ 
    t.depth = 0 
} 

let carp = Carp(depth: 0) 
surface(t: &carp) 

この機能には、プロトコルではなく、Carpを送信できます。 struct、class、enumはインスタンス化できますが、プロトコルはインスタンス化できません。

関連する問題