有没有办法只弃用变量的setter?

时间:2018-08-08 22:25:44

标签: swift model deprecated

我目前在类open var deviceIdentifier: String?中有一个变量,并且想弃用setter,而只将其变成open private(set) var deviceIdentifier: String?

有没有办法做到这一点?我试图将这两行都放进去,但这显然是Xcode不喜欢的冲突。

@available(*, deprecated)
open var deviceIdentifier: String?

open private(set) var deviceIdentifier: String?

如果我将其更改为计算变量,则编译器很高兴,但我希望避免这种情况。这是唯一的方法,并且可以按预期工作吗?

private var _deviceIdentifier: String?
open var deviceIdentifier: String? {
    get {
        return _deviceIdentifier
    }
    @available(*, deprecated)
    set(newValue){

    }
}

2 个答案:

答案 0 :(得分:0)

目前看来,唯一的方法是使用计算变量,但它确实可以按预期工作。

//TODO: put back to non-computed variable when making set private
private var _deviceIdentifier: String?    
open var deviceIdentifier: String? {
    get {
        return _deviceIdentifier
    }
    @available(*, deprecated)
    set(newValue) {
        _deviceIdentifier = newValue
    }
}

答案 1 :(得分:-2)

我认为放置private(set) var deviceIdentifier: String?就足够了,当有人尝试设置此变量的值时,编译器将报告不可能。

> Cannot assign to property: 'deviceIdentifier' setter is inaccessible