[swift-users] Implicitly capture a mutating self
Richard Wei
rxrwei at gmail.com
Fri Dec 16 03:05:55 CST 2016
It’s not the correct choice here :)
> On Dec 16, 2016, at 03:04, Rien <Rien at Balancingrock.nl> wrote:
>
> 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 <rxrwei at 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 <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> 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 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> 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> 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
>>>>> 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
>>>
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>
>>
>
More information about the swift-users
mailing list