Let’s see… let name = plist[“name”].bridge() as String
Not the worst, but definitely better than any of the alternatives below. Unfortunately, I think that “if” is out of the question, at least for Swift 3. Jordan > On May 23, 2016, at 20:21, Jed Lewison <[email protected]> wrote: > > If we could have extensions on AnyObject, a simple .bridge() would do the > trick, right? (Assuming bridge was generic.) I think something along those > lines was mentioned in the proposal. > > Sent from my iPhone > > On May 23, 2016, at 5:26 PM, Jordan Rose via swift-evolution > <[email protected] <mailto:[email protected]>> wrote: > >> I am way late, but I share Brent’s concerns. I don’t think this addresses >> the very common case of “getting a String out of a heterogeneous dictionary”. >> >> let name = plist[“name”] as! String >> >> becomes one of these: >> >> let name = plist[“name”] as! NSString as String >> let name = String(plist[“name”] as! NSString) >> let name = String(forceBridging: plist[“name”]) // not in the proposal >> >> none of which I’m particularly happy with. >> >> Jordan >> >> >>> On May 19, 2016, at 02:31, Brent Royal-Gordon via swift-evolution >>> <[email protected] <mailto:[email protected]>> wrote: >>> >>>> * What is your evaluation of the proposal? >>> >>> The review is technically over, but I don't believe a decision has been >>> announced yet, so... >>> >>> I am generally in favor, but I have a serious concern about the readability >>> of certain conversions with this change. To wit, conversions like these: >>> >>> myArray as! [NSView] >>> myDictionary as! [String: NSView] >>> >>> Are about to become something more like these: >>> >>> [NSView](forcedLazyBridging: myArray) >>> [String: NSView](forcedLazyBridging: myDictionary) >>> >>> Or these: >>> >>> Array<NSView>(forcedLazyBridging: myArray) >>> Dictionary<String, NSView>(forcedLazyBridging: myDictionary) >>> >>> Either option is a significant regression in code readability compared to >>> the status quo. >>> >>> It's enough to make me wonder if we shouldn't have special-cased conversion >>> methods for NSArray, NSDictionary, and NSSet: >>> >>> myArray.of(NSView) // returns [NSView] >>> myDictionary.of(NSView, for: String) // returns [String: NSView] >>> mySet.of(NSView) // returns >>> Set<NSView> >>> >>> On the other hand, if you *don't* have to specify an element type, these >>> aren't so bad: >>> >>> Array(forcedLazyBridging: myArray) >>> Dictionary(forcedLazyBridging: myDictionary) >>> >>> And it gets even better if you use something a little saner than >>> `forcedLazyBridging` for the label. >>> >>>> * Is the problem being addressed significant enough to warrant a change >>>> to Swift? >>> >>> Yes. Conversions are a mess, and it'll be nice to clean them up. >>> >>>> * Does this proposal fit well with the feel and direction of Swift? >>> >>> Yes. >>> >>>> * If you have used other languages or libraries with a similar feature, >>>> how do you feel that this proposal compares to those? >>> >>> Most languages I've used have had much simpler cast systems with nothing >>> particularly close to Swift's bridging casts. >>> >>>> * How much effort did you put into your review? A glance, a quick >>>> reading, or an in-depth study? >>> >>> Quick reading. >>> >>> -- >>> Brent Royal-Gordon >>> Architechies >>> >>> _______________________________________________ >>> swift-evolution mailing list >>> [email protected] <mailto:[email protected]> >>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >> >> _______________________________________________ >> swift-evolution mailing list >> [email protected] <mailto:[email protected]> >> https://lists.swift.org/mailman/listinfo/swift-evolution >> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
