在子句中的Swift元组

在子句中的Swift元组,第1张

概述我有通用类: class Generic<T> { var value: T init(value: T) { self.value = value }} 并且我想编写仅在T是任何类型的2个值的元组的情况下使用的扩展方法,并且此方法返回具有3个值的新元组的Generic类型的值.我试过了: extension Generic { func app 我有通用类:

class Generic<T> {    var value: T    init(value: T) {        self.value = value    }}

并且我想编写仅在T是任何类型的2个值的元组的情况下使用的扩展方法,并且此方法返回具有3个值的新元组的Generic类型的值.我试过了:

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

但显然这不起作用,因为where子句只接受协议.

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

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,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,C>>(value: Tuple3Impl(value.i0,value.i1,c))    }}var a = Generic(value: Tuple2Impl("Hello",256))print(a.append(3.14).value.i2)
总结

以上是内存溢出为你收集整理的在子句中的Swift元组全部内容,希望文章能够帮你解决在子句中的Swift元组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/999909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存