Thanks Jordan!

I can definitely file an issue.

A better diagnostic would definitely help.

James


> On Sep 15, 2017, at 2:03 PM, Jordan Rose <jordan_r...@apple.com> wrote:
> 
> Hi, James. The trick here is that the name you’ll get in Swift for these 
> methods is probably 'compareQuery(_:toQuery:)', because the Swift compiler 
> detects that the “result” is redundant with the type name. In Xcode 8 the 
> compiler didn’t check if you were using the “old" name to satisfy a protocol, 
> but Xcode 9 now does (for unrelated reasons).
> 
> Since this is a source-breaking change, can you file an issue at 
> https://bugs.swift.org <https://bugs.swift.org/> ? At the very least we 
> should make the diagnostic better.
> 
> You can always tell the Swift compiler you know better by using the 
> NS_SWIFT_NAME annotation to provide an alternate name, using Swift function 
> name syntax.
> 
> Jordan
> 
> 
>> On Sep 15, 2017, at 12:45, James Dempsey via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>> I am updating from Xcode 8 to Xcode 9, still using Swift 3.
>> 
>> In my project I am getting warnings of the pattern:
>> 
>> Unavailable instance method ‘compareQueryResult(_:toQueryResult:)’ was used 
>> to satisfy a requirement of protocol ‘ResultComparable’.
>> 
>> My project uses an Obj-C++ framework to wrap C++ and expose it in Obj-C.
>> 
>> The instance method in question is declared and implemented in a number of 
>> Obj-C classes in this framework.
>> 
>> @interface DocumentQuery: Query {
>>    - (ComparisonResult)compareQueryResult:(DocumentResult *)result1 
>> toQueryResult:(DocumentResult *)result2;
>> }
>> @end
>> 
>> @interface GroupQuery: Query {
>>    - (ComparisonResult)compareQueryResult:(GroupResult *)result1 
>> toQueryResult:(GroupResult *)result2;
>> }
>> @end
>> 
>> 
>> 
>> Another framework imports the Obj-C++ framework. In this framework the 
>> protocol is defined in Swift with an associated type:
>> 
>> public protocol ResultComparable
>> {
>>     associatedtype ResultType
>>     func compareQueryResult(_ r1: ResultType, toQueryResult r2: ResultType) 
>> -> ComparisonResult
>> }
>> 
>> And conformance is declared:
>> 
>> extension DocumentQuery: ResultComparable {}
>> extension GroupQuery: ResultComparable {}
>> 
>> 
>> This compiled without warnings in Xcode 8 / Swift 3, but they appear in 
>> Xcode 9 / Swift 3. Any help in understanding the issue and how to fix it 
>> would be greatly appreciated.
>> 
>> James
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org <mailto: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

Reply via email to