gpt4 book ai didi

swift - 在 Swift 2 中使用变量的 getter 方法返回不同的类型

转载 作者:搜寻专家 更新时间:2023-11-01 07:28:52 26 4
gpt4 key购买 nike

我正在制作一款 Hangman 游戏,它有两种模式:正常模式和 evil-mode 。 Normal 和 evul 都是模式的子类。类(class)模式会保存以下内容:猜对的字母、猜错的字母,并且模式具有猜测功能。

类模式 正常模式 邪恶:模式

现在我想让我的代码尽可能简单,所以我想在开始游戏之前和加载 View 时,我将启动 evul 子类或普通子类。我得到了一个局部变量,它根据是否启用了 evulmode 的事实返回 return 或 false。所以当它不是时,getter 函数将启动正常的子类。所以像这样我不再需要任何 if 语句并使我的游戏代码更简单。

问题:因为普通子类是不同于 evul 子类的另一种类型,所以它不会工作。这是我得到的错误:无法将返回类型 x 转换为类型 x。

这是我的代码:

    var Game: Normal {
get {
if evulMode == false {
return(Normal())
} else {
return(Evul())
}
}
}

一个解决方案或任何 f

有关如何做得更好的反馈已得到应用。

最佳答案

我会让 Mode rawRepresentable 然后创建一个 enum 来表示所有游戏模式选项。然后您可以创建一个类型为 enum 的变量。

要使您的代码正常工作,请为变量指定父类(super class)类型。然后使用向下转型。

class Mode {

}

class Normal : Mode {
let someAttr : Int = 10
}

class Evul : Mode {
let someOtherAttr : String = "ABC"
}

var evulMode : Bool = false


var game: Mode {
get {
if evulMode == false {
return(Normal())
} else {
return(Evul())
}
}
}

向下转型后,您将可以访问特定于子类的所有属性和方法。

if let normalGame = game as? Normal {
print(normalGame.someAttr)
}

if let evulGame = game as? Evul {
print(evulGame.someOtherAttr)
}

Mode 也可以是一个协议(protocol)。您只需要 NormalEvul 都符合或继承自。协议(protocol)的优点是您可以遵循多个协议(protocol),而您只能从一个父类(super class)继承。

protocol Mode {

}

关于swift - 在 Swift 2 中使用变量的 getter 方法返回不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964920/

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