我有一个交换机和table.if交换机“on”我应该包括停用的用户,如果交换机“关闭”然后只显示活动customer.i我从api获取数据作为所有客户基于API的响应。在一个名为active的参数中,如果active为true,则客户处于活动状态。为了那个原因 我试图将数据从一个模型复制到另一个模型swift显示错误,因为无法将类型'sguserdata'(即,arraymodelobject)的值转换为预期的参数类型'sguserwithoutactivationdeactivation'(即,arraymodelobject)两个数组对象类似主要名称
import UIKit
class SGUserlistViewController: SGBaseViewController,UITableViewDelegate,UITableViewDataSource {
var userlistdatawithmsg:sguserlistdatawithmsg?
@IBOutlet weak var usertable: UITableView!
@IBOutlet weak var btnnew_users: UIButton!
@IBOutlet weak var IncludeDeactiveview: UIView!
@IBOutlet weak var includedeactive_switch: UISwitch!
let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 55, height: 55))
var userlistwithoutdeactivation : sguserlistdatawithoutdeactivation?
var userdatawithoutdeactivation = [sguserwithoutdeactivation]()
var userdata = [sguserdata]()
override func viewDidLoad() {
self.title = "Users"
super.viewDidLoad()
searchonlypending()
self.usertable.register(UINib(nibName: "sgpurchaseorderviewallTableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "sgpurchaseorderviewallTableViewCell")
}
func searchonlypending(){
self.activityIndicator.startAnimating()
let params: [String : Any] = [:]
SGWebServices.sharedWebServices.getuserlist(params:params) { (error, response) in
if (error == nil) {
if response?.message != "Authorization has been denied for this request."{
print("success")
let userDefaults = UserDefaults.standard
let encodedData = NSKeyedArchiver.archivedData(withRootObject: response!)
userDefaults.set(encodedData, forKey: "userlist")
userDefaults.synchronize()
//let userlist = self.userlistdatawithmsg?.data
self.usertable.reloadData()
self.activityIndicator.stopAnimating()
if response?.data.count == 0{
let alert = UIAlertController(title:"" , message: "No User found", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}else{
self.activityIndicator.stopAnimating()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "SgloginViewController")
self.present(controller, animated: true, completion: nil)
}
}
else{
let alert = UIAlertController(title: "Oops", message: "Something went wrong", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
}
@IBAction func addnewuser(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "SGAdduserViewController")
self.present(controller, animated: true, completion: nil)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if includedeactive_switch.isOn == true{
if userlistwithoutdeactivation?.data.count != nil{
return (userlistwithoutdeactivation?.data.count)!
}
}
else{
if userlistwithoutdeactivation?.data.count != nil{
return (userlistwithoutdeactivation?.data.count)!
}
}
return 0
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 91
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = usertable.dequeueReusableCell(withIdentifier: "sgpurchaseorderviewallTableViewCell")! as! sgpurchaseorderviewallTableViewCell
cell.poname.text = userlistwithoutdeactivation?.data[indexPath.row].userName
cell.fromclient.text = userlistwithoutdeactivation?.data[indexPath.row].roleName
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
let selected_rowforuserdetails = indexPath.row
print(selected_rowforuserdetails)
UserDefaults.standard.set(selected_rowforuserdetails, forKey:"selected_row_for_userdetils")
UserDefaults.standard.synchronize()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "SGUserdetailViewController")
self.present(controller, animated: true, completion: nil)
}
@IBAction func userlistincludedeactiveations(_ sender: UISwitch) {
if includedeactive_switch.isOn == false{
print(self.userlistdatawithmsg?.data.count)
//let userlist = self.userlistdatawithmsg?.data
if SGManager.sharedManager.getuserslist()?.data != nil{
let modeldata = SGManager.sharedManager.getuserslist()
userlistdatawithmsg = modeldata
for pom in (self.userlistdatawithmsg?.data)!{
if pom.active == true
{
self.userlistwithoutdeactivation?.data.append(pom)
}
}
usertable.reloadData()
}
}
else{
print(self.userlistdatawithmsg?.data.count)
if SGManager.sharedManager.getuserslist()?.data != nil{
let modeldata = SGManager.sharedManager.getuserslist()
userlistdatawithmsg = modeldata
self.userlistwithoutdeactivation?.data[0] = userlistdatawithmsg?.data[0]
usertable.reloadData()
}
}
}
}
这两个模型除了名字之外都是比喻的
模型1:
import Foundation
class sguserdata : NSObject, NSCoding{
var active : Bool!
var billingAddress : AnyObject!
var clientId : Int!
var confirmPassword : AnyObject!
var createdByUserName : AnyObject!
var domainInfo : AnyObject!
var email : String!
var emailConfirmed : Bool!
var emailStatus : Bool!
var firstName : String!
var id : String!
var imagePath : AnyObject!
var joinDate : String!
var lastName : String!
var level : Int!
var loggedInUserClientId : Int!
var loggedInUserId : AnyObject!
var loggedInUserName : AnyObject!
var password : AnyObject!
var passwordHash : AnyObject!
var phoneNumber : String!
var role : sguserrole!
var roleId : AnyObject!
var roleName : String!
var securityStamp : AnyObject!
var userName : String!
/**
* Instantiate the instance using the passed dictionary values to set the properties values
*/
init(fromDictionary dictionary: NSDictionary){
active = dictionary["active"] as? Bool
billingAddress = dictionary["billingAddress"] as? AnyObject
clientId = dictionary["clientId"] as? Int
confirmPassword = dictionary["confirmPassword"] as? AnyObject
createdByUserName = dictionary["createdByUserName"] as? AnyObject
domainInfo = dictionary["domainInfo"] as? AnyObject
email = dictionary["email"] as? String
emailConfirmed = dictionary["emailConfirmed"] as? Bool
emailStatus = dictionary["emailStatus"] as? Bool
firstName = dictionary["firstName"] as? String
id = dictionary["id"] as? String
imagePath = dictionary["imagePath"] as? AnyObject
joinDate = dictionary["joinDate"] as? String
lastName = dictionary["lastName"] as? String
level = dictionary["level"] as? Int
loggedInUserClientId = dictionary["loggedInUserClientId"] as? Int
loggedInUserId = dictionary["loggedInUserId"] as? AnyObject
loggedInUserName = dictionary["loggedInUserName"] as? AnyObject
password = dictionary["password"] as? AnyObject
passwordHash = dictionary["passwordHash"] as? AnyObject
phoneNumber = dictionary["phoneNumber"] as? String
if let roleData = dictionary["role"] as? NSDictionary{
role = sguserrole(fromDictionary: roleData)
}
roleId = dictionary["roleId"] as? AnyObject
roleName = dictionary["roleName"] as? String
securityStamp = dictionary["securityStamp"] as? AnyObject
userName = dictionary["userName"] as? String
}
/**
* Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property
*/
func toDictionary() -> NSDictionary
{
var dictionary = NSMutableDictionary()
if active != nil{
dictionary["active"] = active
}
if billingAddress != nil{
dictionary["billingAddress"] = billingAddress
}
if clientId != nil{
dictionary["clientId"] = clientId
}
if confirmPassword != nil{
dictionary["confirmPassword"] = confirmPassword
}
if createdByUserName != nil{
dictionary["createdByUserName"] = createdByUserName
}
if domainInfo != nil{
dictionary["domainInfo"] = domainInfo
}
if email != nil{
dictionary["email"] = email
}
if emailConfirmed != nil{
dictionary["emailConfirmed"] = emailConfirmed
}
if emailStatus != nil{
dictionary["emailStatus"] = emailStatus
}
if firstName != nil{
dictionary["firstName"] = firstName
}
if id != nil{
dictionary["id"] = id
}
if imagePath != nil{
dictionary["imagePath"] = imagePath
}
if joinDate != nil{
dictionary["joinDate"] = joinDate
}
if lastName != nil{
dictionary["lastName"] = lastName
}
if level != nil{
dictionary["level"] = level
}
if loggedInUserClientId != nil{
dictionary["loggedInUserClientId"] = loggedInUserClientId
}
if loggedInUserId != nil{
dictionary["loggedInUserId"] = loggedInUserId
}
if loggedInUserName != nil{
dictionary["loggedInUserName"] = loggedInUserName
}
if password != nil{
dictionary["password"] = password
}
if passwordHash != nil{
dictionary["passwordHash"] = passwordHash
}
if phoneNumber != nil{
dictionary["phoneNumber"] = phoneNumber
}
if role != nil{
dictionary["role"] = role.toDictionary()
}
if roleId != nil{
dictionary["roleId"] = roleId
}
if roleName != nil{
dictionary["roleName"] = roleName
}
if securityStamp != nil{
dictionary["securityStamp"] = securityStamp
}
if userName != nil{
dictionary["userName"] = userName
}
return dictionary
}
/**
* NSCoding required initializer.
* Fills the data from the passed decoder
*/
@objc required init(coder aDecoder: NSCoder)
{
active = aDecoder.decodeObject(forKey: "active") as? Bool
billingAddress = aDecoder.decodeObject(forKey: "billingAddress") as? AnyObject
clientId = aDecoder.decodeObject(forKey: "clientId") as? Int
confirmPassword = aDecoder.decodeObject(forKey: "confirmPassword") as? AnyObject
createdByUserName = aDecoder.decodeObject(forKey: "createdByUserName") as? AnyObject
domainInfo = aDecoder.decodeObject(forKey: "domainInfo") as? AnyObject
email = aDecoder.decodeObject(forKey: "email") as? String
emailConfirmed = aDecoder.decodeObject(forKey: "emailConfirmed") as? Bool
emailStatus = aDecoder.decodeObject(forKey: "emailStatus") as? Bool
firstName = aDecoder.decodeObject(forKey: "firstName") as? String
id = aDecoder.decodeObject(forKey: "id") as? String
imagePath = aDecoder.decodeObject(forKey: "imagePath") as? AnyObject
joinDate = aDecoder.decodeObject(forKey: "joinDate") as? String
lastName = aDecoder.decodeObject(forKey: "lastName") as? String
level = aDecoder.decodeObject(forKey: "level") as? Int
loggedInUserClientId = aDecoder.decodeObject(forKey: "loggedInUserClientId") as? Int
loggedInUserId = aDecoder.decodeObject(forKey: "loggedInUserId") as? AnyObject
loggedInUserName = aDecoder.decodeObject(forKey: "loggedInUserName") as? AnyObject
password = aDecoder.decodeObject(forKey: "password") as? AnyObject
passwordHash = aDecoder.decodeObject(forKey: "passwordHash") as? AnyObject
phoneNumber = aDecoder.decodeObject(forKey: "phoneNumber") as? String
role = aDecoder.decodeObject(forKey: "role") as? sguserrole
roleId = aDecoder.decodeObject(forKey: "roleId") as? AnyObject
roleName = aDecoder.decodeObject(forKey: "roleName") as? String
securityStamp = aDecoder.decodeObject(forKey: "securityStamp") as? AnyObject
userName = aDecoder.decodeObject(forKey: "userName") as? String
}
/**
* NSCoding required method.
* Encodes mode properties into the decoder
*/
@objc func encode(with aCoder: NSCoder)
{
if active != nil{
aCoder.encode(active, forKey: "active")
}
if billingAddress != nil{
aCoder.encode(billingAddress, forKey: "billingAddress")
}
if clientId != nil{
aCoder.encode(clientId, forKey: "clientId")
}
if confirmPassword != nil{
aCoder.encode(confirmPassword, forKey: "confirmPassword")
}
if createdByUserName != nil{
aCoder.encode(createdByUserName, forKey: "createdByUserName")
}
if domainInfo != nil{
aCoder.encode(domainInfo, forKey: "domainInfo")
}
if email != nil{
aCoder.encode(email, forKey: "email")
}
if emailConfirmed != nil{
aCoder.encode(emailConfirmed, forKey: "emailConfirmed")
}
if emailStatus != nil{
aCoder.encode(emailStatus, forKey: "emailStatus")
}
if firstName != nil{
aCoder.encode(firstName, forKey: "firstName")
}
if id != nil{
aCoder.encode(id, forKey: "id")
}
if imagePath != nil{
aCoder.encode(imagePath, forKey: "imagePath")
}
if joinDate != nil{
aCoder.encode(joinDate, forKey: "joinDate")
}
if lastName != nil{
aCoder.encode(lastName, forKey: "lastName")
}
if level != nil{
aCoder.encode(level, forKey: "level")
}
if loggedInUserClientId != nil{
aCoder.encode(loggedInUserClientId, forKey: "loggedInUserClientId")
}
if loggedInUserId != nil{
aCoder.encode(loggedInUserId, forKey: "loggedInUserId")
}
if loggedInUserName != nil{
aCoder.encode(loggedInUserName, forKey: "loggedInUserName")
}
if password != nil{
aCoder.encode(password, forKey: "password")
}
if passwordHash != nil{
aCoder.encode(passwordHash, forKey: "passwordHash")
}
if phoneNumber != nil{
aCoder.encode(phoneNumber, forKey: "phoneNumber")
}
if role != nil{
aCoder.encode(role, forKey: "role")
}
if roleId != nil{
aCoder.encode(roleId, forKey: "roleId")
}
if roleName != nil{
aCoder.encode(roleName, forKey: "roleName")
}
if securityStamp != nil{
aCoder.encode(securityStamp, forKey: "securityStamp")
}
if userName != nil{
aCoder.encode(userName, forKey: "userName")
}
}
}
模型2:
import Foundation
class sguserwithoutdeactivation : NSObject, NSCoding{
var active : Bool!
var billingAddress : AnyObject!
var clientId : Int!
var confirmPassword : AnyObject!
var createdByUserName : AnyObject!
var domainInfo : AnyObject!
var email : String!
var emailConfirmed : Bool!
var emailStatus : Bool!
var firstName : String!
var id : String!
var imagePath : AnyObject!
var joinDate : String!
var lastName : String!
var level : Int!
var loggedInUserClientId : Int!
var loggedInUserId : AnyObject!
var loggedInUserName : AnyObject!
var password : AnyObject!
var passwordHash : AnyObject!
var phoneNumber : String!
var role : sguserrole!
var roleId : AnyObject!
var roleName : String!
var securityStamp : AnyObject!
var userName : String!
/**
* Instantiate the instance using the passed dictionary values to set the properties values
*/
init(fromDictionary dictionary: NSDictionary){
active = dictionary["active"] as? Bool
billingAddress = dictionary["billingAddress"] as? AnyObject
clientId = dictionary["clientId"] as? Int
confirmPassword = dictionary["confirmPassword"] as? AnyObject
createdByUserName = dictionary["createdByUserName"] as? AnyObject
domainInfo = dictionary["domainInfo"] as? AnyObject
email = dictionary["email"] as? String
emailConfirmed = dictionary["emailConfirmed"] as? Bool
emailStatus = dictionary["emailStatus"] as? Bool
firstName = dictionary["firstName"] as? String
id = dictionary["id"] as? String
imagePath = dictionary["imagePath"] as? AnyObject
joinDate = dictionary["joinDate"] as? String
lastName = dictionary["lastName"] as? String
level = dictionary["level"] as? Int
loggedInUserClientId = dictionary["loggedInUserClientId"] as? Int
loggedInUserId = dictionary["loggedInUserId"] as? AnyObject
loggedInUserName = dictionary["loggedInUserName"] as? AnyObject
password = dictionary["password"] as? AnyObject
passwordHash = dictionary["passwordHash"] as? AnyObject
phoneNumber = dictionary["phoneNumber"] as? String
if let roleData = dictionary["role"] as? NSDictionary{
role = sguserrole(fromDictionary: roleData)
}
roleId = dictionary["roleId"] as? AnyObject
roleName = dictionary["roleName"] as? String
securityStamp = dictionary["securityStamp"] as? AnyObject
userName = dictionary["userName"] as? String
}
/**
* Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property
*/
func toDictionary() -> NSDictionary
{
var dictionary = NSMutableDictionary()
if active != nil{
dictionary["active"] = active
}
if billingAddress != nil{
dictionary["billingAddress"] = billingAddress
}
if clientId != nil{
dictionary["clientId"] = clientId
}
if confirmPassword != nil{
dictionary["confirmPassword"] = confirmPassword
}
if createdByUserName != nil{
dictionary["createdByUserName"] = createdByUserName
}
if domainInfo != nil{
dictionary["domainInfo"] = domainInfo
}
if email != nil{
dictionary["email"] = email
}
if emailConfirmed != nil{
dictionary["emailConfirmed"] = emailConfirmed
}
if emailStatus != nil{
dictionary["emailStatus"] = emailStatus
}
if firstName != nil{
dictionary["firstName"] = firstName
}
if id != nil{
dictionary["id"] = id
}
if imagePath != nil{
dictionary["imagePath"] = imagePath
}
if joinDate != nil{
dictionary["joinDate"] = joinDate
}
if lastName != nil{
dictionary["lastName"] = lastName
}
if level != nil{
dictionary["level"] = level
}
if loggedInUserClientId != nil{
dictionary["loggedInUserClientId"] = loggedInUserClientId
}
if loggedInUserId != nil{
dictionary["loggedInUserId"] = loggedInUserId
}
if loggedInUserName != nil{
dictionary["loggedInUserName"] = loggedInUserName
}
if password != nil{
dictionary["password"] = password
}
if passwordHash != nil{
dictionary["passwordHash"] = passwordHash
}
if phoneNumber != nil{
dictionary["phoneNumber"] = phoneNumber
}
if role != nil{
dictionary["role"] = role.toDictionary()
}
if roleId != nil{
dictionary["roleId"] = roleId
}
if roleName != nil{
dictionary["roleName"] = roleName
}
if securityStamp != nil{
dictionary["securityStamp"] = securityStamp
}
if userName != nil{
dictionary["userName"] = userName
}
return dictionary
}
/**
* NSCoding required initializer.
* Fills the data from the passed decoder
*/
@objc required init(coder aDecoder: NSCoder)
{
active = aDecoder.decodeObject(forKey: "active") as? Bool
billingAddress = aDecoder.decodeObject(forKey: "billingAddress") as? AnyObject
clientId = aDecoder.decodeObject(forKey: "clientId") as? Int
confirmPassword = aDecoder.decodeObject(forKey: "confirmPassword") as? AnyObject
createdByUserName = aDecoder.decodeObject(forKey: "createdByUserName") as? AnyObject
domainInfo = aDecoder.decodeObject(forKey: "domainInfo") as? AnyObject
email = aDecoder.decodeObject(forKey: "email") as? String
emailConfirmed = aDecoder.decodeObject(forKey: "emailConfirmed") as? Bool
emailStatus = aDecoder.decodeObject(forKey: "emailStatus") as? Bool
firstName = aDecoder.decodeObject(forKey: "firstName") as? String
id = aDecoder.decodeObject(forKey: "id") as? String
imagePath = aDecoder.decodeObject(forKey: "imagePath") as? AnyObject
joinDate = aDecoder.decodeObject(forKey: "joinDate") as? String
lastName = aDecoder.decodeObject(forKey: "lastName") as? String
level = aDecoder.decodeObject(forKey: "level") as? Int
loggedInUserClientId = aDecoder.decodeObject(forKey: "loggedInUserClientId") as? Int
loggedInUserId = aDecoder.decodeObject(forKey: "loggedInUserId") as? AnyObject
loggedInUserName = aDecoder.decodeObject(forKey: "loggedInUserName") as? AnyObject
password = aDecoder.decodeObject(forKey: "password") as? AnyObject
passwordHash = aDecoder.decodeObject(forKey: "passwordHash") as? AnyObject
phoneNumber = aDecoder.decodeObject(forKey: "phoneNumber") as? String
role = aDecoder.decodeObject(forKey: "role") as? sguserrole
roleId = aDecoder.decodeObject(forKey: "roleId") as? AnyObject
roleName = aDecoder.decodeObject(forKey: "roleName") as? String
securityStamp = aDecoder.decodeObject(forKey: "securityStamp") as? AnyObject
userName = aDecoder.decodeObject(forKey: "userName") as? String
}
/**
* NSCoding required method.
* Encodes mode properties into the decoder
*/
@objc func encode(with aCoder: NSCoder)
{
if active != nil{
aCoder.encode(active, forKey: "active")
}
if billingAddress != nil{
aCoder.encode(billingAddress, forKey: "billingAddress")
}
if clientId != nil{
aCoder.encode(clientId, forKey: "clientId")
}
if confirmPassword != nil{
aCoder.encode(confirmPassword, forKey: "confirmPassword")
}
if createdByUserName != nil{
aCoder.encode(createdByUserName, forKey: "createdByUserName")
}
if domainInfo != nil{
aCoder.encode(domainInfo, forKey: "domainInfo")
}
if email != nil{
aCoder.encode(email, forKey: "email")
}
if emailConfirmed != nil{
aCoder.encode(emailConfirmed, forKey: "emailConfirmed")
}
if emailStatus != nil{
aCoder.encode(emailStatus, forKey: "emailStatus")
}
if firstName != nil{
aCoder.encode(firstName, forKey: "firstName")
}
if id != nil{
aCoder.encode(id, forKey: "id")
}
if imagePath != nil{
aCoder.encode(imagePath, forKey: "imagePath")
}
if joinDate != nil{
aCoder.encode(joinDate, forKey: "joinDate")
}
if lastName != nil{
aCoder.encode(lastName, forKey: "lastName")
}
if level != nil{
aCoder.encode(level, forKey: "level")
}
if loggedInUserClientId != nil{
aCoder.encode(loggedInUserClientId, forKey: "loggedInUserClientId")
}
if loggedInUserId != nil{
aCoder.encode(loggedInUserId, forKey: "loggedInUserId")
}
if loggedInUserName != nil{
aCoder.encode(loggedInUserName, forKey: "loggedInUserName")
}
if password != nil{
aCoder.encode(password, forKey: "password")
}
if passwordHash != nil{
aCoder.encode(passwordHash, forKey: "passwordHash")
}
if phoneNumber != nil{
aCoder.encode(phoneNumber, forKey: "phoneNumber")
}
if role != nil{
aCoder.encode(role, forKey: "role")
}
if roleId != nil{
aCoder.encode(roleId, forKey: "roleId")
}
if roleName != nil{
aCoder.encode(roleName, forKey: "roleName")
}
if securityStamp != nil{
aCoder.encode(securityStamp, forKey: "securityStamp")
}
if userName != nil{
aCoder.encode(userName, forKey: "userName")
}
}
}
如果有人知道解决方案,请提供帮助。
答案 0 :(得分:0)
首先,我建议使用大写字母来启动类名,这样可以使代码更容易阅读。
要解决您的问题,我会制作一个包含您想要显示的所有常用字段的协议,然后使这两个类符合该协议。然后,您可以在viewcontroller中拥有该协议的数组,并且可以使用任一类的成员填充它。
protocol SGUserType {
var active: Bool { get set }
var billingAddress: Any { get set }
...
}
class SGUserData : SGUserType, NSObject, NSCoding {
var active: Bool
var billingAddress: Any
...
}
所以在你的viewcontroller中而不是:
var userlistwithoutdeactivation : sguserlistdatawithoutdeactivation?
var userdatawithoutdeactivation = [sguserwithoutdeactivation]()
var userdata = [sguserdata]()
你可以:
var userData = [SGUserType]()