OH. I completely misread this, and jumped to the mistake I would have made. 
You’re all correct. Sorry, Tony; sorry, John.

Jordan

> On Jul 21, 2016, at 15:06, John Spurlock <john.spurl...@gmail.com> wrote:
> 
> Nope, that doesn't work, try it yourself.
> 
> I tried that, any many more variations, before posting the minimal repro 
> example here.
> 
> On Thu, Jul 21, 2016 at 5:46 PM, Jordan Rose <jordan_r...@apple.com 
> <mailto:jordan_r...@apple.com>> wrote:
> I’m a bit late here, but I don’t see why this is necessary. John overrode 
> 'encode(_: Int, forKey: String)’ instead of ‘encode(_: Int32, forKey: 
> String)’. Sure, overloading makes this kind of mistake harder to spot, 
> especially when the run-time error comes from Objective-C, but it’s hardly 
> unusual for a Swifty program.
> 
> Jordan
> 
> 
>> On Jul 21, 2016, at 13:06, Tony Parker via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>> FYI:
>> 
>> https://github.com/apple/swift/pull/3663 
>> <https://github.com/apple/swift/pull/3663>
>> 
>> - Tony
>> 
>>> On Jul 20, 2016, at 12:10 PM, Tony Parker via swift-users 
>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>>> 
>>>> 
>>>> On Jul 20, 2016, at 5:17 AM, John Spurlock <john.spurl...@gmail.com 
>>>> <mailto:john.spurl...@gmail.com>> wrote:
>>>> 
>>>> 1. Since encoding/decoding various types is the principal domain of this 
>>>> type, it seems ok to be overly clear in the method names here.
>>>> 
>>> 
>>> Agreed; I’m trying out a few approaches to see what works best.
>>> 
>>>> 2. Is there a way to systematically look for other types that may also 
>>>> have this problem lurking with ints or other similar overload groups?
>>>> 
>>> 
>>> I don’t think so. I also know that the importer will happily create 
>>> ambiguous method names, for example when importing two ObjC methods that 
>>> are the same except that one has an options argument. The options gets a 
>>> default value and presto - two methods with the same signature. We only 
>>> find out when someone tries to use it in other source code.
>>> 
>>> - Tony
>>> 
>>>> On Tue, Jul 19, 2016 at 9:52 PM, Tony Parker <anthony.par...@apple.com 
>>>> <mailto:anthony.par...@apple.com>> wrote:
>>>> I thought of the exact same name, but I'm not enthusiastic about the 
>>>> inconsistency this creates with all of the other decode methods on 
>>>> NSCoder. I'm discussing with a few people to decide what to do next. 
>>>> 
>>>> - Tony
>>>> 
>>>> On Jul 19, 2016, at 6:32 PM, Brent Royal-Gordon <br...@architechies.com 
>>>> <mailto:br...@architechies.com>> wrote:
>>>> 
>>>>> You could just do the one and call it encodeCInt. I think people would 
>>>>> understand that it's different because it's using a sort-of-foreign type. 
>>>>> 
>>>>> -- 
>>>>> Brent Royal-Gordon
>>>>> Sent from my iPhone
>>>>> 
>>>>> On Jul 19, 2016, at 4:33 PM, Tony Parker <anthony.par...@apple.com 
>>>>> <mailto:anthony.par...@apple.com>> wrote:
>>>>> 
>>>>>> Hi John,
>>>>>> 
>>>>>> Thanks for filing the bug.
>>>>>> 
>>>>>> The root cause of the issue is that the importer would turn the 
>>>>>> following methods into the same name:
>>>>>> 
>>>>>> - (void)encodeInt:(int)x forKey:(NSString *)k;
>>>>>> - (void)encodeInt32:(uint32_t)x forKey:(NSString *)k;
>>>>>> 
>>>>>> Plus, there is the added confusion that this method:
>>>>>> 
>>>>>> - (void)encodeInteger:(NSInteger)x forKey:(NSString *)k;
>>>>>> 
>>>>>> is imported into Swift like this:
>>>>>> 
>>>>>> func encode(_ x: Int, forKey k : String)
>>>>>> 
>>>>>> where, as you can see, “Int” means “NSInteger”, but not the C “int”.
>>>>>> 
>>>>>> I’m not really sure how to resolve this and still allow for subclassing 
>>>>>> without simply reverting these names back to Swift 2.2 style, so I think 
>>>>>> that’s probably what I’ll have to do:
>>>>>> 
>>>>>> func encodeInt(_ x : Int32, forKey k : String)
>>>>>> func encodeInt32(_ x : Int32, forKey k : String)
>>>>>> func encodeInt64(_ x : Int64, forKey k : String)
>>>>>> func encodeInteger(_ x : Int, forKey k : String)
>>>>>> 
>>>>>> and so on, for all of the encode methods, so they are consistent.
>>>>>> 
>>>>>> - Tony
>>>>>> 
>>>>>>> On Jul 19, 2016, at 8:20 AM, John Spurlock <john.spurl...@gmail.com 
>>>>>>> <mailto:john.spurl...@gmail.com>> wrote:
>>>>>>> 
>>>>>>> Ok, filed a new bug for the encodeInt:forKey issue:  
>>>>>>> rdar://problem/27425997 <>
>>>>>>> 
>>>>>>> Ensured it reproduces in xcode beta 3, swift version 3.0 
>>>>>>> (swiftlang-800.0.34.6 clang-800.0.33)
>>>>>>> 
>>>>>>> Is there anything I can do in the meantime as a swift-only workaround 
>>>>>>> to fix my custom NSCoder?
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> - john
>>>>>>> 
>>>>>>> On Mon, Jul 18, 2016 at 10:52 PM, Tony Parker <anthony.par...@apple.com 
>>>>>>> <mailto:anthony.par...@apple.com>> wrote:
>>>>>>> We renamed some of these methods for Swift 3 in an attempt to remove 
>>>>>>> some of the confusion surrounding which of these did what - they were 
>>>>>>> really named for C types and not Swift ones.
>>>>>>> 
>>>>>>> encodeInt:forKey: and decodeInt:forKey: are the two missing ones, since 
>>>>>>> they were easily confused with the Swift Int type. I think we’ll have 
>>>>>>> to figure out a different approach here. John, please file a bug at 
>>>>>>> bugreport.apple.com <http://bugreport.apple.com/> and let me know the 
>>>>>>> radar number, and we’ll look into it.
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> - Tony
>>>>>>> 
>>>>>>> > On Jul 18, 2016, at 6:33 PM, Brent Royal-Gordon 
>>>>>>> > <br...@architechies.com <mailto:br...@architechies.com>> wrote:
>>>>>>> >
>>>>>>> >> Hi Tony - when I add that attribute, I get an error at compile-time:
>>>>>>> >> Objective-C method has a different selector from the method it 
>>>>>>> >> overrides ('encodeInt:forKey:' vs. 'encodeInteger:forKey:')
>>>>>>> >>
>>>>>>> >> If I update to encodeInteger:forKey as the fix describes, it 
>>>>>>> >> compiles, but I'm getting the same original problem at runtime.  
>>>>>>> >> i.e. "encodeInt:forKey: only defined for abstract class"
>>>>>>> >>
>>>>>>> >> Any other ideas?  See the same thing over there?  You should be able 
>>>>>>> >> to paste that into a new swift 3 test.
>>>>>>> >
>>>>>>> > If you look at the NSCoder documentation, you'll see 25 methods in 
>>>>>>> > the Swift version of the "Encoding General Data" section, and 27 
>>>>>>> > (non-deprecated) in the Objective-C version. `-encodeInt:forKey:` has 
>>>>>>> > no Swift equivalent. I'm not sure what the other missing method is.
>>>>>>> >
>>>>>>> > I think this is probably a bug or design oversight, and I'd recommend 
>>>>>>> > you file a radar against Foundation. If this is a primitive method 
>>>>>>> > for NSCoding, it needs to be accessible from Swift.
>>>>>>> >
>>>>>>> > --
>>>>>>> > Brent Royal-Gordon
>>>>>>> > Architechies
>>>>>>> >
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>> 
>>> 
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users@swift.org <mailto:swift-users@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>> <https://lists.swift.org/mailman/listinfo/swift-users>
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org <mailto:swift-users@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users 
>> <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