<div dir="ltr">Having read the proposal a couple times now, I like it, but I have couple if small questions, and I&#39;m sure I&#39;ll have more in the next day or so. I&#39;m going to refer to NSData et. al. in the questions because that&#39;s the example given in the proposal, but these questions should be more widely applicable.<div><br></div><div>First, relating to customizing the behavior though a custom subclass to NSData, I&#39;m assuming that the as operator will box the instance of the NSData subclass. That is, `MyData() as Data` will create a new instance of MyData, a new instance of Data, and assign the MyData instance to the Data instance&#39;s _box property.</div><div><br></div><div>If that&#39;s the case, why not make it more explicit that Data is wrapping MyData and instead create an initializer for Data that takes the NSData instance to wrap instead of using the as operator? It definitely matches the use of the as operator from NSString to String, but that design decision seems to predate a preference for initializers in type conversion, and I&#39;m wondering if there&#39;s a disadvantage to initializers or an advantage to the as operator that I&#39;m not seeing.</div><div><br></div><div>Second, let&#39;s say I have a MyMutableData class in Obj-C that&#39;s a subclass of NSMutableData. I have an Objective-C method that returns an instance of MyMutableData, and his function is called from Swift, and I do something like `let foo = objCObj.objCMethod() as Data`. The foo instance is now supposed to be immutable, but backed by a mutable Objective-C object. If I then mutate the data in Objective-C, what happens?</div><div><br></div><div>If the answer to this is that the MyMutableData instance is copied in the transfer from Objective-C to Swift so that mutations in Objective-C don&#39;t affect the Swift instance, what about the case where I used `var foo` instead of `let foo`? Does that mean that if I modify the data in Objective-C that it won&#39;t get modified in Swift (and vice-versa)?</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 22, 2016 at 10:18 AM, Tony Parker via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div dir="auto" style="word-wrap:break-word"><div dir="auto" style="word-wrap:break-word"><div dir="auto" style="word-wrap:break-word"><div dir="auto" style="word-wrap:break-word">Dear swift-evolution denizens,<div><br></div><div>As you know from our announcement of Swift Open Source and our work on naming guidelines, one of our goals for Swift 3 is to “drop NS” for Foundation. We want to to make the cross-platform Foundation API that is available as part of swift-corelibs feel like it is not tied to just Darwin targets. We also want to reinforce the idea that new Foundation API must fit in with the language, standard library, and the rapidly evolving design patterns we see in the community.</div><div><br></div><div>You challenged us on one part of this plan: some Foundation API just doesn’t “feel Swifty”, and a large part of the reason why is that it often does not have the same value type behavior as other Swift types. We took this feedback seriously, and I would like to share with you the start of an important journey for some of the most commonly used APIs on all of our platforms: adopting value semantics for key Foundation types.</div><div><br></div><div>We have been working on this for some time now, and the set of diffs that result from this change is large. At this point, I am going to focus effort on an overview of the high level goals and not the individual API of each new type. In order to focus on delivering something up to our quality standards, we are intentionally leaving some class types as-is until a future proposal. If you don’t see your favorite class on the list — don’t despair. We are going to iterate on this over time. I see this as the start of the process.</div><div><br></div><div>One process note: we are still trying to figure out the best way to integrate changes to API that ship as part of the operating system (which includes Foundation) into the swift-evolution review process. Swift-evolution is normally focused on changes to functionality in the compiler or standard library. In general, I don’t expect all new Foundation API introduced in the Darwin/Objective-C framework to go through the open source process. However, as we’ve brought up this topic here before, I felt it was important to bring this particular change to the swift-evolution list.</div><div><br></div><div>As always I welcome your feedback.</div><div><br></div><div><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0069-swift-mutability-for-foundation.md" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0069-swift-mutability-for-foundation.md</a></div><div><br></div><div>Thanks,</div><div>- Tony</div><div><br></div><div><br></div><div><br></div></div></div></div></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>