<div>This seems like a bug (missing feature?) in how the API is imported for Swift. You might consider filing a Radar.</div><div> <br><div class="gmail_quote"><div>On Thu, Feb 9, 2017 at 3:12 PM Michel Fortin via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The `string` property of `NSTextStorage` is of type `String`, but the contract it must implement is that it should return the backing store of the attributed string (the underlying `NSMutableString` used as the backing store). It seems to me that this makes it impossible to implement correctly a subclass of `NSTextStorage` in Swift, because Swift automatically wraps the `NSString` into a `String` and the underlying mutable storage is not passed around.<br class="gmail_msg">
<br class="gmail_msg">
Here&#39;s the documentation for that method:<br class="gmail_msg">
<a href="https://developer.apple.com/reference/foundation/nsattributedstring/1412616-string" rel="noreferrer" class="gmail_msg" target="_blank">https://developer.apple.com/reference/foundation/nsattributedstring/1412616-string</a><br class="gmail_msg">
<br class="gmail_msg">
In case the contract isn&#39;t clear from the documentation (it wasn&#39;t for me), I got a confirmation as a response in radar 30314719:<br class="gmail_msg">
&gt; It’s returning a copy of the backing store, but the contract is actually returning the backing store string. The copy storage declaration in the property spec is only used for setter implementation.<br class="gmail_msg">
<br class="gmail_msg">
So looks like this is impossible to model correctly in Swift due to the automatic bridging to `String`. Some APIs in AppKit expect the `NSString` they receive to mutate when mutating the text storage (touch bar suggestions in `NSTextView`) and will do bad things this isn&#39;t the case.<br class="gmail_msg">
<br class="gmail_msg">
Obviously, I can work around this by writing some Objective-C code, but it&#39;d be better if I could avoid splitting the class implementation between two languages. There&#39;s another way using swizzling to map the Objective-C method to a Swift implementation of the same method that has the correct signature, and that&#39;s probably what I&#39;ll end up doing unless a better solution can be pointed out to me.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
--<br class="gmail_msg">
Michel Fortin<br class="gmail_msg">
<a href="https://michelf.ca" rel="noreferrer" class="gmail_msg" target="_blank">https://michelf.ca</a><br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
swift-users mailing list<br class="gmail_msg">
<a href="mailto:swift-users@swift.org" class="gmail_msg" target="_blank">swift-users@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br class="gmail_msg">
</blockquote></div></div>