Ok, what do these two functions look like once imported into Swift?

- (void)encodeInt:(int)intv forKey:(NSString *)key;
- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;

- Tony

> On Jul 21, 2016, at 2:53 PM, Jordan Rose <jordan_r...@apple.com> wrote:
> 
> But they aren’t. One takes an Int and the other takes an Int32. John just 
> overrode the wrong one.
> 
> Jordan
> 
>> On Jul 21, 2016, at 14:52, Tony Parker <anthony.par...@apple.com 
>> <mailto:anthony.par...@apple.com>> wrote:
>> 
>> It’s because two separate methods in ObjC are apparently mapped to the exact 
>> same Swift signature on import.
>> 
>> - Tony
>> 
>>> On Jul 21, 2016, at 2: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