Not the ResultType, you mean, but the input type, right? Yeah, I finally 
figured that out, although it doesn't explain another situation I'm 
experiencing that I didn't include in the post.

However, that doesn't explain why it can't infer it in the last example.

> On Apr 25, 2017, at 02:58 , Ole Begemann <o...@oleb.net> wrote:
> 
> The withUnsafeMutableBytes method has two generic parameters, ResultType and 
> ContentType:
> 
> mutating func withUnsafeMutableBytes<ResultType, ContentType>(_ body: 
> (UnsafeMutablePointer<ContentType>) throws -> ResultType) rethrows -> 
> ResultType
> 
> In your examples, the type checker can't infer the type of ResultType. You'll 
> have to state it explicitly by specifying the type of the closure's argument. 
> For example:
> 
> msg.withUnsafeMutableBytes {
>     (inPointer
> : UnsafeMutablePointer<UInt8>
> ) -> Void in
>     // ...
> }
> 
> 
> On 25.04.2017 10:45, Rick Mann via swift-users wrote:
>> The following playground reproduces an issue I'm having, in that the code 
>> won't compile depending on the content of the closure. In fact, an empty 
>> closure is fine, but when I try to call certain things, it's not.
>> 
>> I figure it has something to do with the type inference for inPointer, but I 
>> can't figure out what it needs to work.
>> 
>> ---------------------------
>> import Foundation
>> 
>> //   OKAY:
>> 
>> var msg = Data(capacity: 123456)
>> msg.withUnsafeMutableBytes
>> { (inPointer) -> Void in
>>      foo(inPointer)
>> }
>> 
>> //error: cannot convert value of type '(_) -> Void' to expected argument 
>> type '(UnsafeMutablePointer<_>) -> _'
>> //{ (inPointer) -> Void in
>> //^~~~~~~~~~~~~~~~~~~~~~~~
>> 
>> msg.withUnsafeMutableBytes
>> { (inPointer) -> Void in
>> }
>> 
>> //error: cannot convert value of type '(_) -> Void' to expected argument 
>> type '(UnsafeMutablePointer<_>) -> _'
>> //{ (inPointer) -> Void in
>> //^~~~~~~~~~~~~~~~~~~~~~~~
>> 
>> msg.withUnsafeMutableBytes
>> { (inPointer) -> Void in
>>      var s: Int
>>      lgs_error(inPointer, 123456, &s)
>> }
>> 
>> func
>> foo(_ data: UnsafeMutableRawPointer!)
>> {
>> }
>> 
>> func
>> lgs_error(_ message: UnsafeMutablePointer<Int8>!,
>>          _ message_capacity: Int,
>>          _ message_size: UnsafeMutablePointer<Int>!) -> Int
>> {
>> }
>> ---------------------------
>> 


-- 
Rick Mann
rm...@latencyzero.com


_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to