以数组作为属性访问结构时出错
error in accessing struct with arrays as properties
我正在尝试使用属性访问结构数组 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].Type”的值转换为预期的参数类型 'TransactionRecord'
上线:
数据 = [[newValue.location], newValue.transactions ]
我收到错误:
无法将类型“[Any]”的值分配给类型 'TransactionPackage'
我能得到一些帮助吗?
第一个错误表明您正在使用类型 [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
}
}
这是更正后的代码。
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)
}
}
更正
- 在 For 循环中,您必须传递数组而不是最后一个值。
- ??用于提供默认值。
- 数据是 TransactionPackage,因此您需要将其分配为完整的 TransactionPackage。或者你也可以这样做。
data.location = newValue.location
data.transactions = newValue.transactions
我正在尝试使用属性访问结构数组 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].Type”的值转换为预期的参数类型 'TransactionRecord'
上线: 数据 = [[newValue.location], newValue.transactions ] 我收到错误: 无法将类型“[Any]”的值分配给类型 'TransactionPackage'
我能得到一些帮助吗?
第一个错误表明您正在使用类型 [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
}
}
这是更正后的代码。
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)
}
}
更正
- 在 For 循环中,您必须传递数组而不是最后一个值。
- ??用于提供默认值。
- 数据是 TransactionPackage,因此您需要将其分配为完整的 TransactionPackage。或者你也可以这样做。
data.location = newValue.location data.transactions = newValue.transactions