gpt4 book ai didi

arrays - 为什么 required 关键字 init 在通用 Array where 子句中是强制性的?

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:49 24 4
gpt4 key购买 nike

在此下标代码中:

extension Array where Element: Foo {
subscript(key: String) -> Any? {
get {
return self.first(where: { $0.key == key })
}
set {
self.append(Element(key: key, value: newValue))
}
}
}

class Foo {
var key: String
var value: Any?

// Why "required"?
required init(key: String, value: Any?) {
self.key = key
self.value = value
}
}

为什么是required在 Foo.init 前面强制?

如果我删除它,我会得到这个错误:

Constructing an object of class type 'Array<Element>.Element' (aka 'Element') with a metatype value must use a 'required' initializer

最佳答案

The required keyword means that inheriting classes must provide an implementation of the method.

extension Array where Element: Foo 意味着扩展应该适用于所有继承自 Foo 的类,所以它们都需要来实现init(key: String, value: Any?).

因此必须添加 required 关键字来确保这一点。

如果它是 extension Array where Element == Foo 你不需要 required,因为对于类型 Foo 有定义 init 带有正确的签名,不需要任何检查。

使 Foo 最终化(final class Foo {})也将删除 required 中的需求。

关于arrays - 为什么 required 关键字 init 在通用 Array where 子句中是强制性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263542/

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