简体   繁体   中英

Computed properties in Swift with getters and setters

I'm playing with the swift language and i have a question on get/set properties. I think that it makes no sense to let the inner variable be public when the value is managed by a computed property. So I think that making this private to the class is a good practise. As I'm still learning maybe some of you could give me other ideas to leave it public.

class aGetSetClass{

    private var uppercaseString : String

    var upperString : String {
        get {
            return uppercaseString
        }
        set (value) {
            self.uppercaseString = value.uppercaseString
        }
    }

    init(){
        uppercaseString = "initialized".uppercaseString
    }

}


var instance3 = aGetSetClass()
println(instance3.upperString) // INITIALIZED
instance3.upperString = "new"
// println(instance3.uppercaseString) // private no access
println(instance3.upperString) // NEW
instance3.upperString = "new123new"
println(instance3.upperString) // NEW123NEW

The only way I could think of public access is either to make it as private set and then use a public set function instead:

public private(set) uppercaseString: String

public func setUpperString(string: String) {
    uppercaseString = string.uppercaseString
}

Or make it public and use a didSet which sets itself under a certain condition (very inefficient for long strings):

public uppercaseString: String {
    didSet {
        if uppercaseString != uppercaseString.uppercaseString {
            uppercaseString = uppercaseString.uppercaseString
        }
    }
}

These implementations use direct public access but your version is in my perspective the better / "swifter" way.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM