PropertyList 解码器解码 returns 无

PropertyList Decoder decode returns nil

我编码了一个结构数组。编码后返回的数据有一些字节,这告诉我有东西被写入文件。但是当我解码它时 returns nil。解码时我没有收到任何错误。我不明白为什么解码后 returns nil。

var allEndpts = [EndPt]()

struct EndPt : Codable {
    var contactStruct  = ContactStruct()
    var purpose: String = String()
}

struct ContactStruct: Codable {
    var firstName:String? = nil
    var lastName:String? = nil
}

private func saveEndPoints() {

    do {
        delegate.documentDirectoryUrl = try FileManager.default.url(
            for: .documentDirectory, 
            in: .userDomainMask, 
            appropriateFor: nil, 
            create: false
        )

        let localFileUrl:URL =
            delegate.documentDirectoryUrl!
                .appendingPathComponent("EndPoints")

        UserDefaults.standard.set(localFileUrl, forKey: "localEndPtUrl")
        print("localEndPtUrl: \(localFileUrl)")
        do {
            let encoder = PropertyListEncoder()
            let data = try encoder.encode(self.allEndpts)
            try data.write(to: localFileUrl)
        } catch {
            print(error)
        }
    } catch {
        print("error")
    }

    retrieveFromFile()
}

func retrieveFromFile() {

    typealias TempArray = [EndPt]
    var temp: TempArray?

    let localFileUrl =  UserDefaults.standard.url( forKey: "localEndPtUrl")
    print("localEndPtUrl: \(localFileUrl)")

    do {
        let data = try Data(contentsOf: localFileUrl!)
        let temp = try PropertyListDecoder().decode(TempArray.self, from: data)
        print("EndPt Array Dump: ", temp)
    } catch {
        print("read error:", error)
    }
}

问题在于

var temp: TempArray?

除非您更改它,否则它将始终为零。你永远不会改变它。当你说

let temp = try PropertyListDecoder().decode(TempArray.self, from: data)

这是不同的 temp