gpt4 book ai didi

ios - 如何在不同的类中使用公共(public)代码

转载 作者:行者123 更新时间:2023-11-28 13:42:33 24 4
gpt4 key购买 nike

我有一些函数和变量需要在某些类中使用。而且在每个类中编写相同的函数、变量和它们的定义很麻烦。

比如我有一些变量和函数

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com