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元组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)