gpt4 book ai didi

swift - 如何在swift的泛型类中定义静态常量?

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:44 24 4
gpt4 key购买 nike

那么如何在 Swift 中定义泛型类常量呢?

问题

对于“普通”类,您可以这样定义它们:

class C {
static let k = 1
}

let a = C.k // 1

但是如果你对泛型类做同样的事情:

class C<T> {
static let k = 1
}

编译时出现以下错误:

Static stored properties not yet supported in generic types

那么如何解决呢?

我目前的解决方案

现在,我正在使用 struct 来解决这个问题:

struct CConstant {
static let K = 1
}

这不是在泛型类的范围内定义的,但它对我有用。 你有更好的解决方案吗?

--

ps:这是我在这里的第一个问题,所以如果你认为有必要,请帮助我改进这个问题=)

最佳答案

对于普通的值类型常量,您可以简单地实现一个只读的静态计算属性:

class C<T> {
// will be evaluated every time the static property is accessed,
// therefore not suited for non-trivial constants.
static var k : Int { return 1 }
}

let a = C<()>.k // Access k on C<Void>

这样做的好处是不会污染“全局命名空间”,因为它是 C<T> 上的静态成员.尽管不幸的是,您必须指定一个泛型参数才能使用常量——因为您不能在没有泛型参数的情况下引用泛型类的类型(因为静态范围内的任何内容都可能需要定义它)。

对于非平凡常量,您可以定义一个私有(private)全局常量,并在您的泛型类中使用只读静态计算属性,以便将其暴露给外界:

private let _k = SomeClass()

class C<T> {
static var k : SomeClass { return _k }
}

同样,这允许您将其作为 C<T> 上的静态成员进行访问同时不污染“全局命名空间”(尽管不在您定义它的 Swift 文件之外)。

关于swift - 如何在swift的泛型类中定义静态常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39543628/

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