Just because it is called “Unsafe” does not mean it is unsafe :-) It all depends on how you use it.
Regards, Rien Site: http://balancingrock.nl Blog: http://swiftrien.blogspot.com Github: http://github.com/Swiftrien Project: http://swiftfire.nl > On 16 Dec 2016, at 09:52, Richard Wei <rxr...@gmail.com> wrote: > > 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 <owe...@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@swift.org> wrote: >> How about using: >> >> UnsafeMutablePointer<TypeOfSelf> >> >> ? >> >> Regards, >> Rien >> >> Site: http://balancingrock.nl >> Blog: http://swiftrien.blogspot.com >> Github: http://github.com/Swiftrien >> Project: http://swiftfire.nl >> >> >> >> >> > On 16 Dec 2016, at 09:10, Richard Wei via swift-users >> > <swift-users@swift.org> wrote: >> > >> > Capturing makes it immutable, which unfortunately can't solve this problem. >> > >> > -Richard >> > >> >> On Dec 16, 2016, at 02:05, Zhao Xin <owe...@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@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@swift.org >> >> https://lists.swift.org/mailman/listinfo/swift-users >> >> >> >> >> > >> > _______________________________________________ >> > swift-users mailing list >> > swift-users@swift.org >> > https://lists.swift.org/mailman/listinfo/swift-users >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org >> https://lists.swift.org/mailman/listinfo/swift-users >> > _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users