[swift-users] Implicitly capture a mutating self

Richard Wei rxrwei at gmail.com
Fri Dec 16 02:52:16 CST 2016


Zhao, it’s not a class.

Rien, unsafe pointers is the last thing I would ever want to introduce in my library…

Capturing self was clean, working perfectly, until Swift 3.0.2.

-Richard

> On Dec 16, 2016, at 02:49, Zhao Xin <owenzx at gmail.com> wrote:
> 
> What is the type of self? If it is a class, try [unowned self].
> 
> Zhaoxin
> 
> 
> 
> 
> 
> 
> On Fri, Dec 16, 2016 at 4:33 PM, Rien via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> How about using:
> 
> UnsafeMutablePointer<TypeOfSelf>
> 
> ?
> 
> Regards,
> Rien
> 
> Site: http://balancingrock.nl <http://balancingrock.nl/>
> Blog: http://swiftrien.blogspot.com <http://swiftrien.blogspot.com/>
> Github: http://github.com/Swiftrien <http://github.com/Swiftrien>
> Project: http://swiftfire.nl <http://swiftfire.nl/>
> 
> 
> 
> 
> > On 16 Dec 2016, at 09:10, Richard Wei via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> >
> > Capturing makes it immutable, which unfortunately can't solve this problem.
> >
> > -Richard
> >
> >> On Dec 16, 2016, at 02:05, Zhao Xin <owenzx at gmail.com <mailto:owenzx at gmail.com>> wrote:
> >>
> >> I did not test the code. But if you cannot implicitly capture a mutating self, you should do it explicitly, right?
> >>
> >> let blockSize = min(512, count)
> >> let blockCount = (count+blockSize-1)/blockSize
> >> device.sync { [self] () -> () in // Launch CUDA kernel
> >>     try! fill<<<(blockSize, blockCount)>>>[
> >>         .pointer(to: &self), .value(value), .value(Int64(count))
> >>     ]
> >> }
> >>
> >> Hope above code works.
> >>
> >> Zhaoxin
> >>
> >> On Fri, Dec 16, 2016 at 3:46 PM, Richard Wei via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
> >> Hi,
> >>
> >> Swift 3.0.2 seems to have broken my code due to mutating self capture. But I have to pass inout self to the closure. Any workaround?
> >>
> >>     let blockSize = min(512, count)
> >>     let blockCount = (count+blockSize-1)/blockSize
> >>     device.sync { // Launch CUDA kernel
> >>         try! fill<<<(blockSize, blockCount)>>>[
> >>             .pointer(to: &self), .value(value), .value(Int64(count))
> >>         ]
> >>     }
> >>
> >> <PastedGraphic-1.png>
> >>
> >> -Richard
> >>
> >> _______________________________________________
> >> swift-users mailing list
> >> swift-users at swift.org <mailto:swift-users at swift.org>
> >> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> >>
> >>
> >
> > _______________________________________________
> > swift-users mailing list
> > swift-users at swift.org <mailto:swift-users at swift.org>
> > https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org <mailto:swift-users at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-users <https://lists.swift.org/mailman/listinfo/swift-users>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161216/b0f667c4/attachment.html>


More information about the swift-users mailing list