在swift 5.1类中使用属​​性包装器时出错

时间:2019-11-15 16:24:30

标签: swift swiftui swift5 combine

我在SwiftUI中使用UserDefaults和Combine。

我的UserDefault.swift文件:

ERROR: object 'input' not found

fluidRow (
               tabBox (
               id = "plot_encam_bar", height = "450px", width = "500px",
               tabPanel ("Bar Chart", plotOutput ("plot_encam_bar", height = "430px")
                     ),
               tabPanel ("Time Series", withSpinner (plotlyOutput ("plot_encam_st", height = "430px")),
                        radioButtons ("justif", "Justification:", inline = TRUE,
                                     choices = list_atend (input $ date_range [1], input $ date_range [2]))
                     )
             )

在以下类中使用此结构时,如下所示:

DataStore.swift文件:

python3 warp.py

在上面的代码中,我遇到2个错误:

(1):类“ DataStore”没有初始化程序

(2):不能将通用结构'UserDefault'用作属性

我认为Swift 5.1会有变化或折旧,但我找不到。

2 个答案:

答案 0 :(得分:2)

使用类似这样的内容:

@propertyWrapper
struct UserDefault<T> {
    let key: String
    let defaultValue: T

    init(key: String, defaultValue: T) {
        self.key = key
        self.defaultValue = defaultValue
    }

    var wrappedValue: T {
        get {
            return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
        }
        set {
            UserDefaults.standard.set(newValue, forKey: key)
        }
    }
}

https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md

答案 1 :(得分:1)

您需要将@propertyWrapper注释添加到您的UserDefault结构中。

@propertyWrapper
struct UserDefault<T> {
...