2016-04-27 12 views
1

私はSwiftを学習していますが、現在はイニシャライザを使用しています。私は単純な継承クラスの関係でテストプロジェクトを作成しました。私は各クラスに10のプロパティを設定し、すべて正常に動作します。しかし、私は何かが不足していると感じます、それはちょうど長すぎると乱雑(特にClassBのinit)、私のコードを短絡してもそれを正式に保つための手掛かりのように見える?多くのプロパティを持つクラスinit

にClassA:

class ClassA: NSObject { 

var a1: Int 
var a2: Int 
var a3: Int 
var a4: Int 
var a5: Int 
var a6: Int 
var a7: Int 
var a8: Int 
var a9: Int 
var a10: Int 

init (a1: Int, a2: Int, a3: Int, a4: Int, a5: Int, a6: Int, a7: Int, a8: Int, a9: Int, a10: Int) { 
    self.a1 = a1 
    self.a2 = a2 
    self.a3 = a3 
    self.a4 = a4 
    self.a5 = a5 
    self.a6 = a6 
    self.a7 = a7 
    self.a8 = a8 
    self.a9 = a9 
    self.a10 = a10 
} 
} 

ClassBの:

class ClassB: ClassA { 

var b1: Int 
var b2: Int 
var b3: Int 
var b4: Int 
var b5: Int 
var b6: Int 
var b7: Int 
var b8: Int 
var b9: Int 
var b10: Int 

init (a1: Int, a2: Int, a3: Int, a4: Int, a5: Int, a6: Int, a7: Int, a8: Int, a9: Int, a10: Int, b1: Int, b2: Int, b3: Int, b4: Int, b5: Int, b6: Int, b7: Int, b8: Int, b9: Int, b10: Int) { 
    self.b1 = b1 
    self.b2 = b2 
    self.b3 = b3 
    self.b4 = b4 
    self.b5 = b5 
    self.b6 = b6 
    self.b7 = b7 
    self.b8 = b8 
    self.b9 = b9 
    self.b10 = b10 
    super.init(a1: a1, a2: a2, a3: a3, a4: a4, a5: a5, a6: a6, a7: a7, a8: a8, a9: a9, a10: a10) 
} 
} 

答えて

1

考えられる解決策は、クラスと継承の代わりに構造体とプロトコルを使用することです。 Swiftでは、structを使ってデフォルトの初期化子を作成します。

protocol A { 
    var a1: Int { get set } 
    var a2: Int { get set } 
    var a3: Int { get set } 
    var a4: Int { get set } 
    var a5: Int { get set } 
    var a6: Int { get set } 
    var a7: Int { get set } 
    var a8: Int { get set } 
    var a9: Int { get set } 
    var a10: Int { get set } 
} 

struct B: A { 
    var a1: Int 
    var a2: Int 
    var a3: Int 
    var a4: Int 
    var a5: Int 
    var a6: Int 
    var a7: Int 
    var a8: Int 
    var a9: Int 
    var a10: Int 

    var b1: Int 
    var b2: Int 
    var b3: Int 
    var b4: Int 
    var b5: Int 
    var b6: Int 
    var b7: Int 
    var b8: Int 
    var b9: Int 
    var b10: Int 
} 
1

んが、あなたがこのコードで何を短縮することはできません。

1

いくつかのオプション:

  • は、あなたのメンバーにデフォルト値を追加します。
  • サブクラスにConvenience Initializerを追加します。
  • メンバーがすべて同じタイプのメンバーの場合は、Arrayを使用してそのメンバーを保管してください。
+1

私はコンビニエンスINITを使用して、一つにすべてのパラメータを置くことができることを知っている、しかし、私は指定された使用することを選択しました:

コードは短いが、あなたはもう、init()メソッドを記述する必要はありませんがということではありません私の例を明確にするために多くのパラメータがあります。とにかく、私は基本的に何もしないことを知っているのは良いことです:)ありがとう! –

0

残念ながら、このコードを短縮する方法はほとんどありません。しかし、あなたが実際にを実行すると仮定すると、Intの束で渡す必要があるは、単に配列を渡す方が簡単でしょうか?または、配列を使用できない場合は、これらの値をすべて保持するクラスを作成して、より読みやすい方法で関数に渡すことができますか?

これはテストプロジェクトなので多分問題はありませんが、これが実際のコードであればこれを受け入れません。

関連する問題