LoginSignup
5
6

More than 5 years have passed since last update.

[Swift] GetterとSetterには異なるアクセス修飾子を設定できる

Posted at

コードリーディングをしていた時に見つけたコード。

public internal(set) var appName: String?

SwiftではGetterとSetterで異なるアクセス修飾子を設定出来るみたい。
上のコードは、getterはpublic, setterはinternalと別々の修飾子が付いている。

この記法を使わずに書くと下のようになる。一手間多くなる。

internal var appName: String?

public func getAppName() -> String? {
    return appName
}

Getters and setters for constants, variables, properties, and subscripts automatically receive the same access level as the constant, variable, property, or subscript they belong to.
You can give a setter a lower access level than its corresponding getter, to restrict the read-write scope of that variable, property, or subscript. You assign a lower access level by writing fileprivate(set), private(set), or internal(set) before the var or subscript introducer.
The Swift Programming Language (Swift 4.1)

どうやらSetterにはGetterよりも低いアクセスレベルを割り当てることが出来るみたい。
internal(set) private(set) fileprivate(set)といったアクセス修飾子が用意されている。

struct TrackedString {
    private(set) var numberOfEdits = 0
    var value: String = "" {
        didSet {
            numberOfEdits += 1
        }
    }
}

var stringToEdit = TrackedString()
stringToEdit.value = "This string will be tracked."
stringToEdit.value += " This edit will increment numberOfEdits."
stringToEdit.value += " So will this one."
print("The number of edits is \(stringToEdit.numberOfEdits)")
// Prints "The number of edits is 3"
stringToEdit.numberOfEdits = 10
// error: Cannot assign to property: 'numberOfEdits' setter is inaccessible

private(set) の為、 stringToEdit に値を入れようとするとエラーが発生する。

5
6
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
5
6