LoginSignup
4
4

More than 3 years have passed since last update.

「iOS アプリ開発デザインパターン入門」を読んでの備忘録

Last updated at Posted at 2019-07-09

こちらの本を読んで分からなかった内容を調べた(これから調べる)際のメモ

1. @objc func ~~~ の @objc って何ぞや?

答え
@objc を付けるとObjective-C側から呼び出す事ができる

詳細
1. Objective-Cではメソッドをコンパイルすると2つの隠し引数(selfcmd)を持った関数が生成される
2. Swiftでは1つのを隠し引数(オブジェクト自身)を持った関数が生成される
3. 隠し引数の数の違いによって相互利用が出来なくなってしまう
4. @objc を付けることでコンパイル時に2つの隠し引数を持ったメソッドが生成できる

補足
プロパティにも @objc をつけることができるみたい

参考
[Swift] @objcの話 [Objective-C]

2. @escaping って何ぞや?

答え
@escaping を付けるとクロージャをスコープ外で保持できる

class A {
    private let storedClosure: () -> ()
    // escapingを付けないとエラーになる
    init(closure: @escaping () -> ()) { 
        storedClosure = closure
    }
}

補足
1. @escaping したクロージャ内でフィールド変数を参照する場合には self を付ける
2. 循環参照に気を付ける

class A {
    private let storedClosure: () -> ()
    // escapingを付けないとエラーになる
    init(closure: @escaping () -> ()) { 
        storedClosure = closure
    }
}

class B {
    private var a: A?
    private var count = 0

    func doSomething() {
        // (2) 循環参照を避けるためにselfを弱参照する
        a = A(closure: { [weak self] in 
            // (1) フィールド変数のcountにアクセスするためにselfを付ける
            self?.count += 1
        })
    }
}

do {
    let b = B()
    b.doSomething()
}

参考
Swiftの @escaping と weak/unowned の理解
Swift 3 の @escaping とは何か

3. fileprivate って何ぞや?

答え
同一ファイル内であればアクセスできる修飾子
(名前の通りそのままですね)

private修飾子との違い

Hello.swift
class A {
    private var hoge = "hoge"
    fileprivate var fuga = "fuga"
}

let a = A()
print(a.hoge) // 'hoge' is inaccessible due to 'private' protection level
print(a.fuga) // fuga

最後に

初めての投稿で「@」が謎のリンクになっていたので、そちらの解決方法もメモしておきます

答え
@を<span>タグで囲う
@arusu0629@arusu0629
<span>@</span>arusu0629 → @arusu0629

参考
Qiitaのマークダウンで @(アットマーク)リンクの無効化に苦戦

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4