[swift-users] Possible swift 3 method rewrite issue with NSRequestConcreteImplementation ?

John Spurlock john.spurlock at gmail.com
Wed Jul 20 07:17:15 CDT 2016


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.

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?

On Tue, Jul 19, 2016 at 9:52 PM, Tony Parker <anthony.parker at 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 <brent at 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.parker at 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.spurlock at 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.parker at 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 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 <brent at 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
>> >
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160720/24106acc/attachment.html>


More information about the swift-users mailing list