[swift-users] Filling two type parameters with the same type
Zhao Xin
owenzx at gmail.com
Sun Jul 9 01:42:15 CDT 2017
Sorry Dave, I didn't notice that you said in `extension`. I just put the "where
Source == Displacement" to the original poster's code and the error showed.
My bad.
Zhao Xin
On Sun, Jul 9, 2017 at 1:56 PM, David Sweeris <davesweeris at mac.com> wrote:
> Hmm... I just tried it in a playground, and it works:
> struct DistortedNoise<Source, Displacement> {
> let source:Source,
> displacement:Displacement
>
>
> init(source:Source, displacement:Displacement)
> {
> self.source = source
> self.displacement = displacement
> }
>
>
> }
> extension DistortedNoise where Source == Displacement {
> init(source:Source)
> {
> self.source = source
> self.displacement = source
> }
> }
> let foo = DistortedNoise(source: 1) // DistortedNoise<Int, Int>
> foo.source // 1
> foo.displacement // 1
>
> That's with Xcode 9b2, using the default Xcode 9.0 toolchain. With Xcode
> 8.3.3 and its default toolchain, the `let foo = ...` line outputs "
> __lldb_expr_2.DistortedNoise<Int, Int>" instead of just "DistortedNoise<Int,
> Int>", but that's just a more... I think the word is "qualified"... name
> for the same thing.
>
> - Dave Sweeris
>
>
> On Jul 8, 2017, at 9:39 PM, Zhao Xin <owenzx at gmail.com> wrote:
>
> No, David, it is now allowed. "error: same-type requirement makes generic
> parameters 'Source' and 'Displacement' equivalent".
>
> Zhao Xin
>
> On Sun, Jul 9, 2017 at 12:35 PM, David Sweeris via swift-users <
> swift-users at swift.org> wrote:
>
>> You could try putting that init in an extension "where Source ==
>> Displacement"
>>
>> > On Jul 8, 2017, at 21:06, Taylor Swift via swift-users <
>> swift-users at swift.org> wrote:
>> >
>> > I have a type like
>> >
>> > struct DistortedNoise<Source, Displacement> where Source:Noise,
>> Displacement:Noise
>> > {
>> > let source:Source,
>> > displacement:Displacement
>> >
>> > init(source:Source, displacement:Displacement)
>> > {
>> > self.source = source
>> > self.displacement = displacement
>> > }
>> >
>> > init(source:Source)
>> > {
>> > self.source = source
>> > self.displacement = source
>> > }
>> > }
>> >
>> > and I get the error
>> >
>> > Compile Swift Module 'Noise' (5 sources)
>> > /home/taylor/noise/sources/noise/noise.swift:576:29: error: 'Source'
>> is not convertible to 'Displacement'
>> > self.displacement = source
>> > ^~~~~~
>> >
>> > How do I tell Swift that I want the same type fulfilling both Source
>> and Displacement?
>> >
>> > _______________________________________________
>> > swift-users mailing list
>> > swift-users at swift.org
>> > https://lists.swift.org/mailman/listinfo/swift-users
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170709/c6e73faf/attachment.html>
More information about the swift-users
mailing list