我正在开发一个必须同时处理Swift和Objective-c的应用程序。 我在Swift和Objective-C中使用了如下模型类“ AccountModel”
@objc class AccountModel : NSObject {
@objc var accountNumberString : String
var accountAliasString : String
@objc var currentBalanceNumber : Double
@objc var availableBalanceNumber : Double
.......
init?(json: Dictionary<String, AnyObject>)
{.....}
}
现在我已经为MVVM逻辑创建了以下协议
protocol AccountListlViewModel {
var isTransactionalAccount: Bool { get }
var isSavingAccount: Bool { get }
var savingAccountModel : AccountModel {get set}
}
extension AccountModel: AccountListlViewModel {
var savingAccountModel: AccountModel {
get {
return self
}
set {
self = newValue *//ERROR . Cannot assign to value: 'self' is immutable'*
}
}
var isTransactionalAccount: Bool {
if self.issuingProductCodeString == account_type_Transactional {
return true
}
return false
}
var isSavingAccount: Bool {
if self.issuingProductCodeString == account_type_Saving {
return true
}
return false
}
}
但是我遇到错误
“无法分配值:'自身'是不可变的”
当我尝试在GET SET中设置SavingAccountModel时
我知道,如果将AccountModel创建为结构体,那么我就可以设置saveAccountModel,但是我也无法像在Objective-c中那样将AccountModel创建为结构体。
请提出如何设置属性 savingAccountModel 的建议。任何想法或建议都很好。
答案 0 :(得分:1)
基于上述(帐户不能同时既是储蓄又是交易性的),您实际上应该在这里考虑继承,而不是像这样的协议/扩展
class SavingsAccount: AccountModel {
//Savings specific code and properties
}
class TransactionalAccount: AccountModel {
//Transactional specific code and properties
}
然后,您可以通过多种方式测试帐户类型。一种可能是尝试投射您的实例。
if let savingsAccount = account as? SavingsAccount {
//Do some savings account stuff here
}
//Similar for other account types