こちらは、備忘録として記載します。
調べた理由
Swiftでプログラムを書く為に、インスタンスの参照部分を知って循環参照を防ぐのと、思わぬところでインスタンスの状態が変わることを防ぐ為に調査してみました。
調べた結果
Swiftの型のことを理解でき、書き方に生かせるようになったのと、他の言語(古い言語)には無い変わった機能が多いため、機能を知るいい機会になったりました。
Swiftは参照型のClass以外に値型のEnumとStructがあることが分かりました。
1 2 3 4 5 6 7 8 9 10 11 12 |
//Enum(列挙型) enum Language { case swift; case java; case cpp; } //Struct(構造体) struct Goods { var name:String; var price:Int; } |
プロパティは強参照がデフォルトとなってます。
1 2 3 4 5 6 7 8 |
class Sample { var property1:String = "";//強参照(デフォルト) var weak property2:String = "";//弱参照 func check(){ } } |
クロージャは参照型
1 2 3 4 5 6 |
func check(){ //クロージャ test({(d1:String,d2:String) -> Bool in return true; }); } |
クロージャ内でクロージャ外の変数を使う場合は弱参照にするためにキャプチャリストを使います。
1 2 3 4 5 |
func check(){ test({(d1:String,d2:String) [weak self] in }); } |
値型はメモリ割り当て解除タイミングの考慮が必要ありません。
IBOutputのプロパティはweakにする必要があります。(自動でプロパティにweakが付く)
キャプチャリストは配列として複数指定できます。
クロージャ内で使用するキャプチャリストが途中で解放されないようにするには変数をアンラップして使用します。
1 2 3 4 5 6 7 |
func check(){ test({(d1:String,d2:String) [weak self] in if let weakSelf = self { // } }); } |
下記の書籍を参考までに載せておきますね!
TECHNICAL MASTER はじめてのiOSアプリ開発 第2版 Xcode 8 Swift 3対応 新品価格 |
![]() |
詳細! Swift 3 iPhoneアプリ開発 入門ノート Swift3 Xcode 8対応 新品価格 |