post Image
[Swift4] privateにextensionからアクセスできる

Swift4でできるようになること

private指定したプロパティやメソッドにextensionからアクセスできるようになります。

sample.swift

struct someStruct {

    private let privateProperty = "private"
    fileprivate let fileprivateProperty = "fileprivate"
}

// 同一ファイル内のextensionじゃないとアクセスできない
extension someStruct {

    // privateなプロパティ・メソッドにアクセス可能(Swift3ではできなかった)
    func printPrivateProperty() {
        print(privateProperty)
    }
}

fileprivateで嫌だったこと

個人的にはfileprivateでモヤモヤすることがありました。

Swift3までの場合、extensionで利用するためにfileprivate指定する、ということはよくあるかと思います。
そうすると、スコープとしてはそのクラスや構造体内に留めておきたい、という場合に不都合がありました。
同一ファイル内の別のクラスや構造体等からアクセスできてしまうからです。

stored property以外はprivateextension内にまとめる、ということもできますが。
アクセス出来てしまうこと自体がしっくりきませんでした。

sample.swift

//  Swift3の場合

struct someStruct {

    // extension内で使いたいのでfileprivate指定
    fileprivate let fileprivateProperty = "fileprivate"
}

extension someStruct {

    func printFileprivateProperty() {
        print(fileprivateProperty)
    }
}

struct otherStruct {

    let some = someStruct()

    // fileprivateはアクセス可能
    // 意図どおりであればもちろんOKだが、
    // Swift3まではextensionのためのみに使うプロパティ・メソッドも
    // fileprivateにするしかなく、意図せぬアクセスが可能な状態になっていた
    func printSomeFileprivateProperty() {
        print(some.fileprivateProperty)
    }
}

privateでOKになって嬉しい

Swift4で上記が解消されます。
意図通りのスコープになって嬉しい!

sample.swift

struct someStruct {

    // someStruct内でのアクセスのみ許可したい
    private let privateProperty = "private"
    // sample.swift内でのアクセスを許可したい
    fileprivate let fileprivateProperty = "fileprivate"
}

// 同一ファイル内のextensionじゃないとアクセスできない
extension someStruct {

    // privateなプロパティ・メソッドにアクセス可能(Swift3ではできなかった)
    func printPrivateProperty() {
        print(privateProperty)
    }
}

// 意図通りのアクセスコントロールを実現できる
struct otherStruct {

    let some = someStruct()

    // someStruct外からはprivateにアクセス出来ない
    /*
    func printSomePrivateProperty() {
        print(some.privateProperty)
    }
     */

    // sample.swift内なのでfileprivatePropertyにアクセス可能
    func printSomeFileprivateProperty() {
        print(some.fileprivateProperty)
    }
}

注意

2017/6/18にXcode 9 betaで検証しています。
beta版なので変更の可能性があります。ご了承ください。


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。