0

は、だから私は2つのプロパティ(List<T>ように振る舞う)Resultsと呼ばれるレルムのカスタムコンテナ型だアレイと一つだ1で働いている:いずれの場合もSwiftでは、オプションではないプロパティを宣言しても初期化は保証されません。

var rowHeights: [CGFloat?]! 
var myResults: Results<ChildObject>! 

、私は、世界的にそれらを宣言する必要がありますそして、私は技術的には、限りスウィフトが懸念しているように、初期化が保証されないことを意味し、viewWillAppear()に後でそれらを初期化することができます。

override func viewWillAppear(_ animated: Bool) { 
... 
myResults = myParentObject.children.sorted(byKeyPath: "childPath", ascending: true) 
... 
rowHeights = Array(repeating: nil, count: myParentObject.children.count) 
... 
} 

私の質問は以下のとおりです。

  1. これらのプロパティを明示的に宣言すると、すべてのリソースが占有されますか?
  2. 初期化の構文/アプローチは正しいですか(特に配列を使用していますか?)

答えて

1
  1. はい、しかし、ごくわずかな量 - について考える価値はありません。

  2. 「初期化」または「正しい」とはどういう意味ですか。両方とも、varオプションとして宣言されるだけで、暗黙的にnilに初期化されます。 (スウィフトでは、のみvar)この特別な暗黙の初期処理は、特別な扱いを受けています。 "と私は後でそれらを初期化できますが、実際には後で行うものはではなく、初期化です。 nilの値を別の値に置き換えるだけです。

    「正しい」とは、コンパイルする場合は「正しく」なければなりません。しかし、より広義には、私はと表示されていると思います。あなたはviewDidLoadまでこれらの値を割り当てるのを遅らせています。それは正確にはです。これは後で値を提供できるようにオプションです。 Swift iOSプログラミングのパターン

+0

私の本では、「なぜOptionals」を参照してください:http://www.apeth.com/swiftBook/ch03.html#_why_optionalsそれはOptionalsが有用であり、あなたがそれらの_both_でOptionalsを使用する理由の二つの理由を与えますあなたのコードの方法。 – matt

+0

私は、初期化を構成するものについて尋ねる第3の質問を追加することを熟考しましたが、それがなくても洞察力を提供しました。ありがとう。私の場合、実際には "var optionals"という宣言はありますか? '!'はそれらを非オプションにしませんか?私はこれが他の何よりも素早い用語を知っている/理解することの問題であると思います。 – Foefirelord