【问题标题】:How to make an array using dummy values from Struct Modal class in Swift iOS如何使用 Swift iOS 中的 Struct Modal 类中的虚拟值创建数组
【发布时间】:2020-03-16 06:07:35
【问题描述】:

我正在从我的服务器获取 JSON。为了解析 JSON,我使用解码器并转换模态类对象中的数据。

这是我的解码器模态类:

struct SyncModelRecord : Codable {

    var date : String
    var shakeState : Int
}

class SyncModel {

    var date : Date
    var shakeState : Int

    init?(record: SyncModelRecord) {

        guard let secondsFrom1970 = Double(record.date) else {
            return nil
        }

        date = Date(timeIntervalSince1970: secondsFrom1970)

        shakeState = record.shakeState
    }
}

我的解析工作正常。

我的问题是现在我必须制作一个“SyncModelRecord”虚拟数组,例如:

var dummySyncModelRecordArray = [SyncModelRecord]()

var syncModelRecord : SyncModelRecord?
syncModelRecord?.shakeState = 0
syncModelRecord?.date = String(Int64(syncTimestamp!))

dummySyncModelRecordArray.append(syncModelRecord!)

但这不起作用。它因错误而崩溃(请参阅下面附加的错误截图)。

请给我建议。

【问题讨论】:

  • 您从未初始化过syncModelRecord,因此出现了错误。这两行不抱怨 syncModelRecord?.shakeState = 0 syncModelRecord?.date = String(Int64(syncTimestamp!)) 因为您正在使用条件展开,因为 syncModelRecord 是 nil 没有任何事情发生 swift 只是忽略这两行。还要避免强制展开:)

标签: ios arrays swift dictionary


【解决方案1】:

您正在强制展开一个值为 nil syncModelRecord

声明时需要实例化。

var syncModelRecord: SyncModelRecord? = SyncModelRecord()

或者,更好的是,不要将其声明为可选项,因为此时您知道它不会是 nil(当然,如果实例化正确):

var syncModelRecord = SyncModelRecord()

【讨论】:

    【解决方案2】:

    您需要实际初始化syncModelRecord。试试这个:

    let syncModelRecord = SyncModelRecord(date: String(Int64(syncTimestamp!)), shakeState: 0)
    
    dummySyncModelRecordArray.append(syncModelRecord!)
    

    另一个提示可能值得探索,您可以直接解码日期并为其指定解码器的策略(在您的情况下为secondsSince1970

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 1970-01-01
      • 2014-02-04
      • 2014-09-16
      • 2020-03-15
      • 2011-12-22
      • 2017-11-18
      • 2020-09-12
      • 2014-09-13
      相关资源
      最近更新 更多