gpt4 book ai didi

ios - 使用关联类型创建元组

转载 作者:行者123 更新时间:2023-11-28 16:17:58 24 4
gpt4 key购买 nike

我正在尝试为元组类型起别名以在我的整个应用程序中使用。我像这样进行初始别名:

associatedtype JSONReplacementValue = (key: String, value: AnyObject?)

看起来很简单。在没有 associatedtype 的情况下使用它时,一切正常。但是,一旦我对它们进行别名化,就会在以下两个地方出现错误:

var replacementValues: [JSONReplacementValue] = []
if let key = key {
replacementValues.append((key: key, value: value))
}

这在 .append 行上给出了一个错误,告诉我 Cannot invoke 'append' with an argument list of type '(key: String, value: AnyObject?)。我尝试替换我附加到类似 JSONReplacementValue(key: key, value: value) 的内容,但这给了我一个错误 'Self.JSONReplacementValue' cannot be constructed because it has no accessible初始值设定项

这是我无法避免的第一个错误。第二个发生在这段代码中:

for replacementValue in values {
json[replacementValue.key] = replacementValue.value
}

(values 是一个 JSONReplacementValue 数组,定义为这样的参数 values: [JSONReplacementValue])

当我尝试访问 replacementValue.key 时出现错误:“Self.JSONReplacementValue”类型的值没有成员“key”。这个我不知道怎么解决。

是否有可能使元组成为associatedtype?如果是这样,我在这里做错了什么?

最佳答案

如果您想创建类型别名,您应该尝试使用 typealias 关键字。 associatedtype 使用协议(protocol)。

此代码适用于 swift 2.2:

typealias JSONReplacementValue = (key: String, value: Any?)

var replacementValues: [JSONReplacementValue] = []
replacementValues.append((key: "one", value: "value"))
print(replacementValues) // prints: [("one", Optional(value))]

还请记住,AnyObject 用于类类型,而 Any 用于所有类型。

另一件事是你最好使用结构而不是元组。

来自 Apple 文档:

Tuples are useful for temporary groups of related values. They are not suited to the creation of complex data structures. If your data structure is likely to persist beyond a temporary scope, model it as a class or structure, rather than as a tuple. For more information, see Classes and Structures.

关于ios - 使用关联类型创建元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876391/

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