我还没有找到任何好的方法来为游戏设计面向协议(protocol)的项目架构。
这是带有 Structs 的第一个版本:
protocol Usable {
func useItem()
}
protocol Item {
var name: String { get }
var amount: Int { get }
var image: String { get }
}
struct Sword: Item, Usable {
var name = ""
var amount = 0
var image = ""
func useItem() {
}
}
struct Shield: Item, Usable {
var name = ""
var amount = 0
var image = ""
func useItem() {
}
}
问题是我必须复制粘贴变量,这些变量是跨项目的大量代码。
这是带有类的第二个版本:
protocol Usable {
func useItem()
}
class BaseItem {
var name = ""
var amount = 0
var image = ""
}
class SwordClass: BaseItem, Usable {
func useItem() {
}
}
这看起来不错,但问题是这些是引用类型,我更希望它们是值类型。
解决这个问题的正确方法是什么?
最佳答案
您应该创建一个符合您的协议(protocol)并需要使用默认值和“使用”闭包进行初始化的通用结构:
protocol Usable {
func useItem()
}
protocol Item {
var name: String { get }
var amount: Int { get }
var image: String { get }
}
struct UsableItem: Item, Usable {
var name = ""
var amount = 0
var image = ""
let use: (Void -> Void)
init(name: String, image: String, use: (Void -> Void)) {
self.name = name
self.image = image
self.use = use
}
func useItem() {
self.use()
}
}
然后您的 JSON 处理将创建具有适当逻辑的实例:
var sword = UsableItem(name: "sword", image: "sword") {
print("cut")
}
关于swift - 如何以面向协议(protocol)的方式创建我的游戏架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34808517/