Swift   发布时间:2022-04-29  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在子句中的Swift元组大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有通用类:

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元组所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。