Read-only and non-computed variable properties in Swift

后端 未结 4 1421
感情败类
感情败类 2020-12-23 08:54

I\'m trying to figure out something with the new Apple Swift language. Let\'s say I used to do something like the following in Objective-C. I have readonly prop

4条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-23 09:15

    Since there are no access controls (meaning that you can't make an access contract that differs depending on who the caller is), here's what I would do for now:

    class Clock {
        struct Counter {
            var hours = 0;
            var minutes = 0;
            var seconds = 0;
            mutating func inc () {
                if ++seconds >= 60 {
                    seconds = 0
                    if ++minutes >= 60 {
                        minutes = 0
                        ++hours
                    }
                }
            }
        }
        var counter = Counter()
        var hours : Int { return counter.hours }
        var minutes : Int { return counter.minutes }
        var seconds : Int { return counter.seconds }
        func incrementTime () { self.counter.inc() }
    }
    

    This merely adds a level of indirection, as it were, to direct access to the counter; another class can make a Clock and then access its counter directly. But the idea — i.e., the contract we're trying to make — is that another class should use the Clock's top-level properties and methods only. We can't enforce that contract, but actually it was pretty much impossible to enforce in Objective-C too.

提交回复
热议问题