> On Jun 9, 2015, at 11:37 AM, Jens Alfke <[email protected]> wrote: > > The new generics support in Objective-C (starting in Xcode 7) is interesting, > although there’s no real documentation that I can find, just a one-paragraph > mention in the Foundation release notes. But if you look at NSArray.h or > NSDictionary.h in the OS X 10.11 or iOS 9 SDK, you can see lots of examples > of their use. > > (There’s also a somewhat related new keyword __kindof, also described in the > release notes, that gives you un-typechecked down-casting. So an RHS of type > “__kindof NSView*” can be assigned to a LHS of type MyViewClass* without a > type-cast. Nice.) > > I’m guessing that the primary reason generics were added was to make the > Cocoa APIs more Swift-friendly, so the Swift APIs don’t just use [AnyObject] > and [AnyObject:AnyValue] everywhere. > > They’ll be useful for Obj-C programming too though, of course.
Hi Jens, You're right, ObjC generics is a generally useful and great extension to Objective-C. If you’d like more information on how they (and __kindof) work, check out Doug Gregor’s part of “Swift and Objective-C Interoperability” at WWDC. > I tried parameterizing the NSArray and NSDictionary types that appear in some > APIs in my code, and everything rebuilt without errors. Which is nice in that > it didn’t break everything and require massive replacing; but on the other > hand it shows that generics are pretty loosely type-checked. It seems that > you can freely assign between, say, NSArray<NSString*>* and a regular > NSArray* without any warnings or errors. In fact you can use the generic form > in a method’s declaration in a class interface, but leave the old form in the > @implementation, without any warnings. Right: allowing progressive adoption, and having zero impact on generated code (so there are no problems adopting generics when you want to deploy backwards to previous OS’s) is a huge goal of the design. -Chris > > For backward compatibility in my APIs I’m doing stuff like this: > #if __has_feature(objc_generics) > typedef NSDictionary<NSString*, id> CBLJSONDict; > #else > typedef NSDictionary CBLJSONDict; > #endif > and then replacing “NSDictionary” with “CBLJSONDict” where appropriate. > > —Jens > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Objc-language mailing list ([email protected]) > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/objc-language/clattner%40apple.com > > This email sent to [email protected]
_______________________________________________ Do not post admin requests to the list. They will be ignored. Objc-language mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/objc-language/archive%40mail-archive.com This email sent to [email protected]
