gpt4 book ai didi

swift - 使用 AnyObject 访问 swift 字典成员

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:43 25 4
gpt4 key购买 nike

我无法理解如何在 Swift 中正确展开。这是情况:

我有这两个类:

class Alpha
{
var val: Int

init(x: Int)
{
val = x
}

func doSomething() -> Int
{
// does stuff and returns an Int value
return val
}
}

第二个类是第一个类的子类

class Beta: Alpha
{
var str: [String] = []

override init(x: Int)
{
super.init(x)
}

func doSomething() -> String
{
// does stuff and returns a String
return str
}
}

到目前为止一切顺利,这两个类按预期工作。但是现在我想创建一个字典来存储这两个类对象中的几个。所以我创建了一个类来管理字典并向其中添加项目。

class Gamma
{
var myDict: [String:AnyObject] = [:]

func addAlphaToDict(key: String, val: Int)
{
self.myDict[key] = Alpha(x: val).self
}

func addBetaToDict(key: String, val: Int)
{
self.myDict[key] = Beta(x: val).self
}
}

这也是有效的,但我认为这可以以某种方式得到改进。我现在遇到的问题是当我尝试访问字典中的值时:

var foo = Gamma()

foo.addAlphaToDict(key: "blah", val: 45)
foo.addBetaToDict(key: "bluh", val: 23)

var result1 = (foo.myDict["blah"] as! Alpha).doSomething()

var result2 = (foo.myDict["bluh"] as! Beta).doSomething()

我发现这里的语法非常笨拙,我觉得我做错了,尽管它有效。我是一位经验丰富的开发人员,但才刚刚开始使用 Swift,所以我对某些事情不是很确定。有更多 Swift 经验的人可以告诉我如何改进这段代码,或者指出我应该去的方向吗?谢谢!

最佳答案

在这种情况下,您可以使用 Alpha 而不是 AnyObject 作为您的字典值。只需在需要时将其向下转换为 Beta。应尽可能避免使用 AnyObjectAny 作为字典键。

但是,我不得不说这种做法很糟糕。您需要有一个更清晰的逻辑来决定键何时成为 Beta,而不仅仅是依赖于知道您传递给字典的键。

关于swift - 使用 AnyObject 访问 swift 字典成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55299573/

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