我有一些函数和变量需要在某些类中使用。而且在每个类中编写相同的函数、变量和它们的定义很麻烦。
比如我有一些变量和函数
@objc public class ResponseBase {
private var _messageType = ""
private var _name = ""
@objc public var name: String {
get { return _name }
set { _name = newValue }
}
@objc public var messageType: String {
get { return _messageType }
set { _messageType = newValue }
}
class func initWithDictionary(_ dictionary: [AnyHashable : Any]) -> ResponseBase {
if let messageType = dictionary["messageType"] as? String {
ret.messageType = messageType
}
if let name = dictionary["Name"] as? String {
ret.name = name
}
}
}
现在我有一些类
class messages {
}
class chat {
}
class videoData {
}
现在我想如何在这些类中使用 ResponseBase 函数和变量。
我试过用
class messages: ResponseBase {
}
通过这样使用,我可以访问这些函数 但是当我从 messages 类调用 ** initWithDictionary** 方法时,我需要消息类的对象,其中包含 ResponseBase 类的所有数据。
最佳答案
问题是你不够“敏捷”
使用协议(protocol)来设置您期望的界面。 使用结构对数据进行分组。
以下是您可以采用的一种方法。 仅供引用,您不需要计算变量,因为您没有计算任何特殊的东西。另外你真的不需要 protocol:init 因为为什么会膨胀?
import Foundation
struct ResponseData {
var messageType: String = ""
var name: String = ""
}
protocol Response {
var data: ResponseData {get set}
}
extension Response {
var name: String {
get { return data.name }
set { data.name = newValue }
}
var messageType: String {
get { return data.messageType }
set { data.messageType = newValue }
}
mutating func initWithDictionary(_ dictionary: [AnyHashable : Any]) -> Response {
if let msgType = dictionary["messageType"] as? String {
data.messageType = msgType
}
if let n = dictionary["Name"] as? String {
data.name = n
}
return self
}
}
class Messages: Response {
var data: ResponseData = ResponseData()
}
//example usage:
Messages().name
Messages().messageType
关于ios - 如何在不同的类中使用公共(public)代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55847523/