gpt4 book ai didi

swift - 如何在 Swift 中为可选类型编写泛型约束?

转载 作者:行者123 更新时间:2023-11-28 06:09:27 26 4
gpt4 key购买 nike

一旦我写了一个泛型约束,它只适合普通类型,而不适合可选类型。当我将其称为可选类型时,它会导致编译器错误:Type 'SomeType?不符合协议(protocol) SomeProtocol'

示例代码如下:

protocol P {}

class C<T> {}

extension C where T: P {
static func test() {}
}

extension Int: P {} // OK
C<Int>.test() // OK


extension Int?: P {} // Fail, but I need it
C<Int?>.test() // Fail, but I need it

更新:

我想办法解决它。

这是示例代码。

protocol P {}

class C<T> {}

extension C where T: P {
static func test() {}
}

extension Int: P {} // OK
C<Int>.test() // OK

protocol OptionalProtocol {
associatedtype WrappedType
}

extension Optional: OptionalProtocol {
typealias WrappedType = Wrapped
}

extension C where T: OptionalProtocol, T.WrappedType==Int {
static func test() {}
}

C<Int?>.test() // OK now

最佳答案

目前无法做到这一点。

extension Optional: P where Wrapped == Int {}

如果我们尝试扩展 Optional,其中 Wrapped 被限制为 Int,编译器会提示“带有约束的扩展不能有继承子句".

注意:这目前正在 SE-0143 下进行提案,应该会出现在 Swift 的 future 版本中。

关于swift - 如何在 Swift 中为可选类型编写泛型约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157780/

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