ошибка доступа к структуре с массивами в качестве свойств - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь получить доступ к массиву структур, используя свойства get / set Каждая структура TransactionRecord имеет местоположение, и для каждого местоположения есть массив транзакций. Каждая транзакция имеет тип TransactionRecord

Вот мой код:

struct TransactionRecord {
    var transactionId: String
    var transactionType: String
}

struct TransactionPackage{
    var location: String
    var transactions: [TransactionRecord]
}
var data = TransactionPackage(location: "", transactions: []) {
        didSet {
            if oldValue == nil || data == nil {
                tableView.reloadData()
            }
        }
    }

    var transaction: TransactionPackage {
        get {
            var transactions = [TransactionRecord]()
            if data.transactions.count > 1 {
                for transaction in data.transactions.last ?? [TransactionRecord]  {
                     transactions.append(transaction)
                }
            }
            return TransactionPackage(location: data.location, transactions: transactions)
        }
        set {
           data = [[newValue.location], newValue.transactions]
        }
    }

Я получаю несколько ошибок: онлайн: для транзакции в data.transactions.last ?? [TransactionRecord] { Я получаю ошибку: Невозможно преобразовать значение типа '[TransactionRecord] .Type' в ожидаемый тип аргумента 'TransactionRecord'

на линии: data = [[newValue.location], newValue.transactions] Я получаю ошибку: Невозможно присвоить значение типа «[Любой]» типу «TransactionPackage»

Могу ли я получить помощь?

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Здесь исправлен код.

    struct TransactionRecord {
        var transactionId: String
        var transactionType: String
    }

    struct TransactionPackage{
        var location: String
        var transactions = [TransactionRecord]()
    }
    var data = TransactionPackage(location: "", transactions: []) {
        didSet {
                //tableView.reloadData()
        }
    }

    var transaction: TransactionPackage {
        get {
            var trans = [TransactionRecord]()
            if data.transactions.count > 1 {
//Corrections 1,2
                for transaction in data.transactions ?? []  {
                    trans.append(transaction)
                }
            }
            return TransactionPackage(location: data.location, transactions: trans)
        }
        set {
//Corrections 3
            data = TransactionPackage(location: newValue.location, transactions: newValue.transactions)
        }
    }

Исправления

  1. В цикле For необходимо передать массив не последнее значение.
  2. ??используется для предоставления значения по умолчанию.
  3. data - TransactionPackage, поэтому вам нужно назначить его как полный TransactionPackage.Или вы можете сделать это так.
data.location = newValue.location
data.transactions = newValue.transactions
0 голосов
/ 24 марта 2019

Первая ошибка говорит о том, что вы используете тип [TransactionRecord] в качестве значения по умолчанию, а не экземпляр типа, например, пустой массив []

Вторая ошибка говорит, что вы не можете назначить [Any]на значение TransactionPackage

Я думаю, вы хотите отобразить data на transaction как вычисляемое свойство

var transaction: TransactionPackage {
    get {
        return TransactionPackage(location: data.location, transactions: data.transactions)
    }
    set {
       data = TransactionPackage(location: newValue.location, transactions: newValue.transactions)
    }
}

или намного проще

var transaction: TransactionPackage {
    get {
        return data
    }
    set {
       data = newValue
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...