72
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

知っているようで知らないSwift5のアクセス修飾子

Last updated at Posted at 2020-02-04

はじめに

今回は、普段あまり意識しないアクセス修飾子について記事を作成していきます!
初心者でもわかりやすくまとめいるので覚えておくと便利です!
Swiftでは、バージョンによって意味が異なるので利用するときはSwiftのバージョンにも注意してください!
今回は、Swift5を利用して記事を作成しています。

##アクセス修飾子とは?
アクセス修飾子は、クラスや関数等にアクセス制限を設けるために利用します。

//privateなどを以下のように利用します。
class HogeHogeViewController:UIViewController  {
    private let hoge: Int!
}

##アクセス修飾子の種類

SwiftModifierSample.playground

    //そのクラス間のみアクセス可能(Swift3からextension内でも利用できるようになりました。)
    private let macBook = "MacBook"

    //private(set)を利用すると、setはprivate、getはinternalの制限にすることができます。
    private(set) var airPods = "airpods"

    //一つのプロジェクト内のターゲットが同一であれば呼び出せる。継承やoverrideもできる。
    internal let iPhone = "iPhone"

    //同じfile内であればアクセス可能
    fileprivate let imac = "iMac"

    // 一つのプロジェクト内のターゲットが同一でなくても呼び出せるが継承やoverrideはできない。
    public var appleWatch = "appleWatch"

    //一つのプロジェクト内のターゲットが同一でなくても呼び出せるが、継承やoverrideもできる。
    open var  macPro = "macPro"

privateが一番制限が強く、openが一番制限が低いです。
private -> private(set) -> internal -> fileprivate -> public -> open
アクセス制限は右に行くほど緩くなります。

##実際に使ってみる。

SwiftModifierSample.playground
class Apple {
    private let macBook = "MacBook"
    private(set) var airPods = "airpods"
    internal let iPhone = "iPhone"
    fileprivate let imac = "iMac"
    public var appleWatch = "appleWatch"
    open var  macPro = "macPro"
}

extension Apple {
    public func hoge1(){
        print(macBook)
    }

    func hoge2(){
        print(macBook)
    }

    private func hoge3(){
        print(macBook)
    }
}

let apple = Apple()
apple.iPhone
apple.imac
apple.macBook  //error: 'macBook' is inaccessible due to 'private' protection level
apple.hoge1()
apple.hoge2()
apple.hoge3()  //error: 'hoge3' is inaccessible due to 'private' protection level

publicやopenの修飾子は主にライブラリー等の作成時に利用されることが多い。
アクセス修飾子を記述しないとデフォルトでinternalが適応される。

##アクセス修飾子って必要なの?
個人アプリで開発していくならどちらでも良いと思いますが、チーム開発をしてる場合は、変数や関数にprivateをつけることで、クラス内部しか利用されていないことを、明示することができるのでコードレビューをしやすくなります。また、外部でアクセスできないようにすると似ている変数名を誤って呼び出すこともなくなります。逆にpublicをつけることでグローバル変数であること明示できるのでコードの読みやすさにつながります。

##参考
https://www.sejuku.net/blog/22679
https://qiita.com/GATA/items/90341f56a56ff584e756

##さいごに
今回は、Xcodeのplaygroundでサンプルコードを作成してGithubにアップしました!
週一でQiita記事を公開していくのでいいねとフォローをよろしくお願いします!

72
60
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
72
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?