が、それは2つのプロパティがありますクラスが初期化されたら、私は応じてローカルDBからfruintsPackContent
にデータを追加したい1つのプロパティが初期化され、dbから別のプロパティ、つまりベストプラクティスにデータをプルするための参照として使用するまで待ちますか?
var fruitsPackId: Int
var fruitsPackContent: Array<Fruit>?
をfruitsPackId
で初期化されました。私はそのような場合にベストプラクティスが何であるか分かりません。
私が今行ったことは、参照IDとしてfruitsPackId
を使用してローカルデータベースからデータを取り出す計算プロパティとしてfruitsPackContent
を作成しています。
しかし、これは正しいアイディアやアイデアではないと思いますか?
マイコード:
class FruitsPack: NSObject {
var fruitsPackId: Int
init(fruitsPackId: Int) {
self.fruitsPackId = fruitsPackId
}
var fruitsPackContent: Array<Fruit>? {
// Pulling data from local db here...
// For this example I create a dummy array with one instance of Fruit
let fruit1 = Fruit(fruitsPackId: self.fruitsPackId, fruitName: "Banana")
var fruits = Array<Fruit>()
fruits.append(fruit1)
return fruits
}
}
class Fruit: FruitsPack {
var fruitName: String
init(fruitsPackId: Int, fruitName: String) {
self.fruitName = fruitName
super.init(fruitsPackId: fruitsPackId)
}
}
EDIT:
怠惰な変数の型を使用して私のために仕事でした:
- クラスの初期化は、そのプロパティとは何の関係もありませんが
- プロパティが呼び出された後でのみメモリが使用されています
- プロパティは、インスタンスメソッドが他
新しいコードによって使用されるために利用可能であるだけ
class FruitsPack: NSObject {
var fruitsPackId: Int
lazy var fruitsPackContent: Array<Fruit>? = self.getFruitsPackContent(self.fruitsPackId)
init(fruitsPackId: Int) {
self.fruitsPackId = fruitsPackId
}
func getFruitsPackContent(fruitsPackId: Int) -> Array<Fruit>? {
// Pulling data from local db here...
// For this example I create a dummy array with one instance of Fruit
let fruit1 = Fruit(fruitsPackId: self.fruitsPackId, fruitName: "Banana")
var fruits = Array<Fruit>()
fruits.append(fruit1)
return fruits
}
}
class Fruit: FruitsPack {
var fruitName: String
init(fruitsPackId: Int, fruitName: String) {
self.fruitName = fruitName
super.init(fruitsPackId: fruitsPackId)
}
}
私は主な方向を得ていますが、fruitsPackContentは空の状態ですので、fruitsPackContentにオブジェクトを追加するまでカウントはゼロになります。 FruitsPackクラスが開始されるとすぐにdbからデータを取得する必要がある場合、論理的にOOPの考え方、コードの正しい場所はどこですか? –
最初に呼び出したとき、 'count'はゼロですが、それが非ゼロのときはどうなりますか?私の主張は、計算上高価なアクションを実行する計算プロパティを実際には望まないということです。クラスがインスタンス化されるとすぐに、データベースからデータを引き出します。データが小さく、メモリに簡単に保持されるため、それを行うには理論的に 'init'で行いますが、格納されたプロパティを使用してそのプロパティを参照するたびにすべてのデータを再フェッチする計算済みプロパティではなく、データを保持します。 – Rob
私はそれにオブジェクトを追加しなかった限りゼロになります。私は、計算されたプロパティ内のDBからデータを追加することは費用がかかり、格納されたプロパティ内のデータをよりスマートに保存することに同意します。しかし、initの間にそれを行うことはできません。私はクラスの子をその配列の中に格納しているので、initの間にそれをやっていれば、親initが終了する前に子initが終了しようとするので失敗します。残念ながら、私はそれをより良くする方法の答えはありません。とにかく助けてくれてありがとう! –