[swift-evolution] Review: Import Objective-C Constants as Swift Types
brent at architechies.com
Thu Feb 18 20:07:08 CST 2016
> Proposal link:
> • What is your evaluation of the proposal?
I think it's an excellent idea. It not only improves the Swift bridging immensely, it actually improves the Objective-C APIs by making them more descriptive in a fairly natural way. It's easy for me to imagine a future version of clang warning about implicit conversions between `swift_wrapper` typedefs, which would improve even pure Objective-C code.
Actually, if I have one objection to this proposal, it's that the clang guys should probably take a look at it and see if they want to do something to `typedef` that helps both languages. I'd be willing to lose the `enum` feature, for instance, if this were instead an `__attribute__((newtype))` which affected both Swift and C family languages.
I also like that this is *not* some magic that happens in the API notes, but something that goes directly into the headers which you can use yourself.
> • Is the problem being addressed significant enough to warrant a change to Swift?
Yes. The type weaknesses of stringly typed Objective-C APIs affect Swift API names; to use an example mentioned in the proposal, the guidelines suggest the "Identifier" should be dropped when `-quantityTypeForIdentifier:` is bridged to Swift, but this isn't possible when the parameter is an untyped `String`.
Having said that, this isn't *as* high a priority as some of the other things planned for Swift 3. If we find we need to defer something, this proposal is a good candidate.
> • Does this proposal fit well with the feel and direction of Swift?
Absolutely. Anything that strengthens the typing of bridged APIs improves their Swiftiness, and a lot of Swift code interoperates with Objective-C.
> • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
I've never used automatic bridging which added type information like this, but I have been known to use type trickery to add type information which is not technically required in both Objective-C and Swift. (For instance, I previously wrote something like `NSLayoutAnchor` which used unnecessary protocols to keep you from accidentally mixing X and Y axis constraints.) Creating synthetic types purely to avoid mistakes is often very helpful.
> • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
A quick reading. I did follow the original thread, though not all that closely.
More information about the swift-evolution