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
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to