It is possible that they implement equality, but not hashing. So two equal 
values could hash differently. I don’t really know how NSObject implements but 
stuff, sorry.

Slava

> On Oct 24, 2017, at 3:26 PM, Jon Shier <[email protected]> wrote:
> 
>       Thanks, Slava, that works. Do you have any idea why that works, but 
> sets of the two arrays are always disjoint? The Set method works for 
> SecCertificate but not SecKey.
> 
> 
> 
> Jon
> 
> 
>> On Oct 24, 2017, at 6:10 PM, Slava Pestov <[email protected]> wrote:
>> 
>> isEqual is defined on NSObject. You could also try using an array of 
>> AnyHashable and calling == instead of isEqual.
>> 
>> Slava
>> 
>>> On Oct 24, 2017, at 3:09 PM, Jon Shier <[email protected]> wrote:
>>> 
>>> Slava:
>>>     How would this change affect this code from Alamofire, used to compare 
>>> two SecKey instances for public key pinning:
>>> 
>>> outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeys(for: 
>>> serverTrust) as [AnyObject] {
>>>  for pinnedPublicKey in pinnedPublicKeys as [AnyObject] {
>>>      if serverPublicKey.isEqual(pinnedPublicKey) {
>>>          serverTrustIsValid = true
>>>          break outerLoop
>>>      }
>>>  }
>>> }
>>> 
>>> I’m not sure why, but the AnyObject casting makes this work correctly, even 
>>> in Swift 4. I’ve tried to “modernize” it by using Sets (compare the pinned 
>>> keys with the available keys Sets) but it doesn’t work (hash implementation 
>>> for SecKey is weird?).  I’m guessing that with the AnyObject case and 
>>> isEqual, some underlying implementation is changed and equality works 
>>> properly (or well enough for this use). I’m happy to get rid of this hack, 
>>> but I’m not sure of any other method to accomplish our goals here.
>>> 
>>> 
>>> 
>>> Jon Shier
>>> 
>>>> On Oct 24, 2017, at 6:02 PM, Slava Pestov via swift-evolution 
>>>> <[email protected]> wrote:
>>>> 
>>>> Hi all,
>>>> 
>>>> Dynamic dispatch of methods through AnyObject is a source of 
>>>> implementation complexity, has many known bugs which we are not going to 
>>>> fix, and no longer makes sense now in an id-as-Any world; AnyObject is not 
>>>> the ‘common currency’ type for arbitrary Objective-C objects anymore.
>>>> 
>>>> I would like to propose we deprecate it as follows:
>>>> 
>>>> - Unconditional warning in Swift 4.1, with a fixit to add an ‘as’ cast to 
>>>> cast the base value to the right type
>>>> - Error in Swift 5 in -swift-version 5 mode
>>>> 
>>>> Thoughts? Does anyone actually rely on this feature, instead of just 
>>>> stumbling on it by accident once in a while?
>>>> 
>>>> Slava
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> [email protected]
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> 
>> 
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to