ios - Сannot 将“Obj”类型的值转换为预期的参数类型“Obj”
问题描述
我有一个来自服务器的数组。
我的问题是当我想将对象添加到数组时出现的错误。如何解决这个问题并使用来自服务器的一组对象?
返回数据示例
[
{
"empId": 1970083,
"empCode": "2007",
"empName": "Emp Test",
"monthClosed": 0,
"monthApproved": 0,
"approvedDate": 0,
"employerName": "Name",
"employerApproval": 1,
"employerApprovalDate": "2020-09-02 17:22:51.843"
},
]
这个结构接收这个数据
struct GetMonthSummaryObj: Codable {
var empId: Int?
var empCode: String?
var empName: String?
var monthClosed: Int?
var monthApproved: Int?
var approvedDate: Int?
var employerName: String?
var employerApproval: Int?
var employerApprovalDate: String?
}
这是 ViewModel 中的一种方法,用于添加传入数组的数据并将其用于表。例如,显示或表格中的单元格数
func setEmployees(employees: [GetMonthSummaryObj?]) {
employeesList = []
employees.forEach {_ in
employeesList.append(CloseMonthEmpListItem(employee: employees))
//Error - Cannot convert value of type '[GetMonthSummaryObj?]' to expected argument type 'GetMonthSummaryObj'
}
}
在这里,我创建了一个数组对象来使用它
class CloseMonthEmpListItem: Equatable, NSCopying {
var employee: GetMonthSummaryObj
init(employee: GetMonthSummaryObj) {
self.employee = employee
}
static func == (lhs: CloseMonthEmpListItem, rhs: CloseMonthEmpListItem) -> Bool {
return lhs.employee.empId == rhs.employee.empId
}
func copy(with zone: NSZone? = nil) -> Any {
let copy = CloseMonthEmpListItem(employee: employee)
return copy
}
}
解决方案
这在您通过时 init(employee: GetMonthSummaryObj)
接受GetMonthSummaryObj
类型, [GetMonthSummaryObj?]
这不起作用
你需要更换
employees.forEach {_ in
employeesList.append(CloseMonthEmpListItem(employee: employees))
}
和
let res = employees.compactMap{ $0 }
res.forEach { item in
employeesList.append(CloseMonthEmpListItem(employee:item))
}
或者
let res = employees.compactMap{ $0 }
employeesList = res.map { CloseMonthEmpListItem(employee:$0) }