gpt4 book ai didi

where 子句中的 Swift 元组

转载 作者:搜寻专家 更新时间:2023-10-31 21:48:16 26 4
gpt4 key购买 nike

我有通用类:

class Generic<T> {
var value: T

init(value: T) {
self.value = value
}
}

我想编写仅在 T 是任何类型的 2 个值的元组时使用的扩展方法,并且此方法返回 Generic 类型的值和 3 个新元组值。我试过:

extension Generic {
func append<A, B, C where T: (A, B)>(c: C) -> Generic<(A, B, C)> {
return Generic(value: (value.0, value.1, c))
}
}

但显然这是行不通的,因为 where 子句只接受协议(protocol)。

最佳答案

我发现实现它的唯一方法是:

class Generic<T> {
var value: T

init(value: T) {
self.value = value
}
}

protocol Tuple2 {
typealias A
typealias B
var i0: A { get }
var i1: B { get }
}

protocol Tuple3: Tuple2 {
typealias C
var i2: C { get }
}

struct Tuple2Impl<A, B>: Tuple2 {
var i0: A
var i1: B

init(_ i0: A, _ i1: B) {
self.i0 = i0
self.i1 = i1
}
}
struct Tuple3Impl<A, B, C>: Tuple3 {
var i0: A
var i1: B
var i2: C

init(_ i0: A, _ i1: B, _ i2: C) {
self.i0 = i0
self.i1 = i1
self.i2 = i2
}
}

extension Generic where T: Tuple2 {
func append<C>(c: C) -> Generic<Tuple3Impl<T.A, T.B, C>> {
return Generic<Tuple3Impl<T.A, T.B, C>>(value: Tuple3Impl(value.i0, value.i1, c))
}
}

var a = Generic(value: Tuple2Impl("Hello", 256))

print(a.append(3.14).value.i2)

关于where 子句中的 Swift 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32736825/

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