Сохранить / получить массив структуры в iCloud

Я действительно учусь сохранять данные в iCloud. Я могу сохранить / получить строку / номер без проблем, но у меня есть переменная структуры, которую я хочу сохранить / получить из облака, и я не могу понять, как это сделать. Я пробовал много разных вещей, но безрезультатно.

Может быть, кто-нибудь может дать мне пример кода, который может сохранить / получить эту переменную «Var2» из iCloud?

struct structure: Codable{
    var a : String!
    var b : String!
    var c : String!
    var d : String!
    var e : Double!
}

var Var2 = [
    structure(a: "-12.1", b: "5.9", c: "Hello", d: "2017-01-21 05:55:55", e: 5),
    structure(a: "151.17", b: "-1.8", c: "All", d: "2018-04-27 07:54:25", e: 0)
]

Если вам нужен мой код:

import UIKit
import CloudKit

class ViewController: UIViewController {


    struct structure: Codable{
        var a : String!
        var b : String!
        var c : String!
        var d : String!
        var e : Double!}


    @IBAction func Button(_ sender: Any) {

        let Var1 = "Have Fun :)"     

        let Var2 = [
            structure(a: "-12.1", b: "5.9", c: "Hello", d: "2017-01-21 05:55:55", e: 5),
            structure(a: "151.17", b: "-1.8", c: "All", d: "2018-04-27 07:54:25", e: 0)]



        let MyRecord = CKRecord(recordType: "Test")

        // Changing the next line to "Var2" give an error
        MyRecord.setValue(Var1, forKey: "Content1")

        CKContainer.default().privateCloudDatabase.save(MyRecord) { (record, error) in
            guard record != nil else { return }
            print("saved record")
        }
    }
}

Несвязанные, но 1) Структуры имени с начальной заглавной буквы 2) Никогда никогда объявляют элементы в структурах, соответствующих Codable, как неявные развернутые необязательные параметры. Удалите восклицательные знаки. Код компилируется

vadian 18.12.2018 19:30
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
1
392
1

Ответы 1

Как частично упоминалось в комментариях, имена структур начинаются с заглавной буквы, а переменные - с начальной строчной буквы, а члены объявляются необязательными.

struct Structure: Codable {
    var a, b, c, d : String
    var e : Double
}

Наиболее эффективное решение - создать новый тип записи с атрибутами, соответствующими членам структуры, и сохранить каждый экземпляр Structure отдельно.

for item in var2 {    

   let myRecord = CKRecord(recordType: "Structure")
   myRecord["a"] = item.a as CKRecordValue
   myRecord["b"] = item.b as CKRecordValue
   // etc.
   myRecord["e"] = NSNumber(value: item.e)
}
...

В качестве альтернативы объявите атрибут Content1 как (NS)Data и закодируйте массив структур с помощью JSONEncoder

 do {
    let data = JSONEncoder().encode(var2)
    let myRecord = CKRecord(recordType: "Test")
    myRecord["Content1"] = data
 } catch { print(error) }

Другие вопросы по теме