gpt4 book ai didi

swift - 如何在 Swift 中为不同类型的 Action 创建继承类?

转载 作者:行者123 更新时间:2023-11-28 15:14:36 27 4
gpt4 key购买 nike

我正忙于用 Swift 制作一个聊天应用程序。我创建了一个Conversation 模型。该模型现在有两个参数:message (String) 和 isSender (Bool)。如果 isSender 为真,消息将出现在 View 的右侧。

对于大多数对话对象,我希望有一个应该被调用的特定 Action 。通过创建一个新对象,我想告诉它对话 Action 的类型,这样我就可以确定哪种 Action 与问题/消息相关联。 Action 可以是请求 gps 许可或根据 bool 值(是或否)显示其他内容。

我想创建多个继承自模型类的类。在我请求 gps 权限的示例中,现在是一个 bool 值。

添加一个新的参数,这样我就可以选择 Action 的类型,并且对于某些 Action ,还有一个可选的闭包。

但我在努力获得正确的结果和结构。我该如何解决这个问题?

我的模型类如下所示:

class Conversation: NSObject {

var message: String?
var isSender: Bool?

required init(message: String?, isSender: Bool?) {
self.message = message
self.isSender = isSender
}

}



class gpsPermission: Conversation {

var hasPermission: Bool?

func askPermissionForGPS() -> Bool {
print("Permission for GPS \(hasPermission)")
return hasPermission!
}

}

最佳答案

我会这样想:

基本消息 - 通用且仅包含通用 Prop 。

// Sender enum (More readable)
enum MessageSender {
case me
case counterparty
}

// Message class
class Message {
let text: String
let sender: MessageSender

required init(with text: String, sender: MessageSender) {
self.text = text
self.sender = sender
}
}

let message = Message(with: "Hi there", sender: .me)

子类消息 - 例如权限:

// Permission Type
enum PermissionType {
case location
case contacts
case notifications
}

// Permission Message
class PermissionMessage: Message {

let permissionType: PermissionType
var permissionGiven = false

required init(with text: String, sender: MessageSender, permission: PermissionType) {
self.permissionType = permission
super.init(with: text, sender: sender)
}

required init(with text: String, sender: MessageSender) {
fatalError("Permission type must be provided")
}
}

let permissionMessage = PermissionMessage(with: "requesting location", sender: .me, permission: .location)

模型内部不得包含控制逻辑。仅触发 UI 更改并被它更改。

编辑:关于向用户请求权限并通知模型对象。IMO,这个逻辑应该与模型(Message,PermissionMessage,......)完全分开。我建议你在一个单独的无状态管理器/ Controller 中实现它,向函数发送一个完成处理程序——像这样:

let contactsPermission = PermissionMessage(with: "requesting contact access", sender: .me, permission: .contacts)
PermissionManager.requestContactsPermission {
contactsPermission.permissionGiven = true
}

class PermissionManager {
static func requestContactsPermission(withCompletion successHandler: ()->()) {

var approved = false
/*
Request contact permission
When done set 'approved' to true, call handler
*/

if approved {
successHandler()
}
}
}

关于swift - 如何在 Swift 中为不同类型的 Action 创建继承类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47076284/

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