ios - 如何在swift中从基类调用超类的函数
问题描述
来自基类的函数
open class ResultBase: ParametersBase<ResultBase.Fields, ResultBase>
{
public enum Fields
{
case Value
case Status
case Message
case ErrorMessages
case WarningMessages
case SuccessMessages
}
private var responseValue: Any?
public var status = CoreResponseStatus.ok
public var message: String?
public var errorMessages = [CoreResponseBase]()
public var warningMessages = [CoreResponseBase]()
public var successMessages = [CoreResponseBase]()
func from(dictionary: [AnyHashable: Any])
{
set(dictionary: dictionary)
responseValue = value(forKey: .Value)
if let value:Int = value(forKey: .Status) {
status = CoreResponseStatus(rawValue: value) ?? CoreResponseStatus.ok
}
message = value(forKey: .Message)
if let value:[[AnyHashable:Any]] = value(forKey: .ErrorMessages) {
value.forEach { [weak self] (item) in
self?.errorMessages.append(CoreResponseBase().from(dictionary: item))
}
}
if let value:[[AnyHashable:Any]] = value(forKey: .WarningMessages) {
value.forEach { [weak self] (item) in
self?.warningMessages.append(CoreResponseBase().from(dictionary: item))
}
}
if let value:[[AnyHashable:Any]] = value(forKey: .SuccessMessages) {
value.forEach { [weak self] (item) in
self?.successMessages.append(CoreResponseBase().from(dictionary: item))
}
}
}
func toDictionary() -> [AnyHashable: Any]
{
toDictionary = [AnyHashable: Any]()
add(key: .Value, value: responseValue)
add(key: .Status, value: status.rawValue)
add(key: .Message, value: message)
var errorMessages = [[AnyHashable: Any]]()
for item in self.errorMessages
{
errorMessages.append(item.toDictionary())
}
add(key: .ErrorMessages, value: errorMessages)
var warningMessages = [[AnyHashable: Any]]()
for item in self.warningMessages
{
warningMessages.append(item.toDictionary())
}
add(key: .WarningMessages, value: warningMessages)
var successMessages = [[AnyHashable: Any]]()
for item in self.successMessages
{
successMessages.append(item.toDictionary())
}
add(key: .SuccessMessages, value: successMessages)
return toDictionary
}
}
超类的函数
open class AuthenticationService
{
open class Authenticate: ParametersBase<Authenticate.Fields, Authenticate>
{
public enum Fields
{
case Expires
case LoginName
case Password
}
public var expires: String?
public var loginName: String?
public var password: String?
override open func from(dictionary: [AnyHashable: Any]) -> Authenticate
{
set(dictionary: dictionary)
let ret = Authenticate()
ret.expires = value(forKey: .Expires)
ret.loginName = value(forKey: .LoginName)
ret.password = value(forKey: .Password)
return ret
}
open func toDictionary() -> [AnyHashable: Any]
{
toDictionary = [AnyHashable: Any]()
add(key: .Expires, value: expires)
add(key: .LoginName, value: loginName)
add(key: .Password, value: password)
return toDictionary
}
}
open class AuthenticateResponse: ResultBase
{
public var value: AuthToken?
open override func from(dictionary: [AnyHashable: Any]) -> AuthenticateResponse
{
super.from(dictionary: dictionary)
let ret = AuthenticateResponse()
if let value:[AnyHashable:Any] = value(forKey: .Value)
{
ret.value = AuthToken().from(dictionary: value)
}
return ret
}
}
}
在这里,我想创建一个 baseClass 的对象 let ret = AuthenticateResponse() 并从 ret 对象返回值,而不是从 super 或 self 。在当前情况下, ret 返回默认分配值而不是字典值,但我想要来自 ret 对象的字典值。
解决方案
推荐阅读
- python - 抓包——两种理论上相同的方法,不同的结果
- python-3.x - 为什么我在 else 条件下得到 else 语法错误?
- swift - RxSwift 兼顾本地数据库和远程网络?
- javascript - Javascript 替换 - 替换的动态值
- c++ - 对任何其他任意函数计时并返回其结果的函数
- ruby-on-rails - Rails 验证用例
- laravel - 在页面之间共享数据 - Laravel Vue
- python - 如何重新排列/重新排序python数据框中的行和列?
- amazon-web-services - 从 Notebook 实例查询 Athena 中的表/数据库
- angular - 如何在不使用“this”的情况下以角度访问当前组件的变量