简体   繁体   English

Swift无法通过下标分配:“ peerDeviceSettings”是仅获取属性”

[英]Swift Cannot assign through subscript: 'peerDeviceSettings' is a get-only property"

I have this declaration in my class: 我班上有这样的声明:

var peerDevice: [String: Any]? 

private var peerDeviceSettings:[String:Any]? {
    get {
        if let settings = peerDevice?["settings"] as? [String:Any] {
            return settings
        }

        return nil
    }
}

Now the problem is if I wish to change peerDeviceSettings, such as this: 现在的问题是,如果我想更改peerDeviceSettings,例如:

 fileprivate func set(_ value: Any?, forKey key: Key) {
    if peerDeviceSettings != nil {
        peerDeviceSettings?[key.rawValue] = value
    } 
 }

I get an error 我得到一个错误

 Cannot assign through subscript: 'peerDeviceSettings' is a get-only property

The point is how do I rearchitect this thing without creating a new mutable variable peerDeviceSettings? 关键是如何在不创建新的可变变量peerDeviceSettings的情况下重新构造此东西?

Just add set (setter) to the property and handle it there. 只需将set (setter)添加到属性中并在那里进行处理。

private var peerDeviceSettings:[String:Any]? {
    get {
        if let settings = peerDevice?["settings"] as? [String:Any] {
            return settings
        }

        return nil
    }
    set {

    }
}

your code seems to be fine, since you're creating links to the nested settings dictionary (sounds reasonably) 您的代码似乎很好,因为您正在创建到嵌套settings字典的链接(听起来合理)

just add setter: 只需添加二传手:

private var peerDeviceSettings: [String: Any]? {
    get {
        if let settings = peerDevice?["settings"] as? [String:Any] {
            return settings
        }

        return nil
    }
    set { 
      if peerDevice == nil {
        peerDevice = [:] // if it's desired behavior
      }
      peerDevice?["settings"] = newValue 
    }

}

I'd also suggest getting rid of optionality in peerDevice , just initialize it with empty value (if it feets your logic) 我还建议摆脱peerDevice的可选peerDevice ,只需将其初始化为空值(如果它符合您的逻辑)

You see this error because you declared only getter for your property, you have also add setter 您看到此错误是因为您仅声明了属性的getter,还添加了setter

    private var peerDeviceSettings:[String:Any]? {
    get {
        if let settings = peerDevice?["settings"] as? [String:Any] {
            return settings
        }

        return nil
    }
    set {
        peerDevice?["settings"] = newValue
    }
}

UPDATE: to show how it must be in this certain case 更新:显示在特定情况下的情况

You need a setter 你需要二传手

private var peerDeviceSettings:[String:Any]? {
    get {
        return  peerDevice?["settings"] as? [String:Any]
    }

    set {
        peerDevice?["settings"] = newValue
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法分配给属性:“ size”是仅获取属性Swift - Cannot assign to property: 'size' is a get-only property Swift 如何为TableView节创建两个数据类型的数组-无法通过下标进行分配:下标是一种仅获取方法 - How to create an array of two data types for TableView Sections - Cannot Assign Through Subscript: Subscript is a get-only 快速在键盘上方添加视图,但出现错误无法分配给属性:“ inputAccessoryView”是仅获取属性 - Swift adding view above keyboard getting Error Cannot assign to property: 'inputAccessoryView' is a get-only property 无法分配给属性“tabBarController”是一个只能获取的属性 - Cannot assign to property 'tabBarController' is a get-only property 无法分配给属性:“ b0”是只读属性 - Cannot assign to property: 'b0' is a get-only property 无法分配给属性:“popupHeight”是一个只能获取的属性 - Cannot assign to property: 'popupHeight' is a get-only property 无法分配给属性:“输出”是仅获取属性 - Cannot assign to property: 'outputs' is a get-only property 无法分配给属性:'inputAccessoryView'是一个get-only属性 - Cannot assign to property: ‘inputAccessoryView’ is a get-only property 无法分配给属性:“值”是一个只能获取的属性 RxSwift - - Cannot assign to property: 'value' is a get-only property RxSwift - 无法分配给属性'observationTime'是一个get-only属性 - Cannot assign to property 'observationTime' is a get-only property
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM