That’s correct, but how would you make the String.UTF16Index values without the 
reference String? They’re not (guaranteed to be) integers.

Jordan


> On May 10, 2016, at 16:04, Zach Waldowski <z...@waldowski.me> wrote:
> 
> Right, I 100% get it. :) This is a difficult problem space, and I'm sure you 
> folks are aware that that difficulty is also reflected in how brutal it is to 
> use all of these derivative string-range-based things in Swift right now. In 
> this case, having no answer to this problem is worse than not having the API 
> at all — check Stack Overflow or GitHub for how often a "just paste this in" 
> String.Index.init(_: Int) comes up.
>  
> As far as NSTextCheckingResult goes, its ranges are always in the "indices" 
> always in the space of the original string… do I have that right? So it would 
> be programmer error to use those ranges in the wrong string just like it is 
> with any Range<String.UTF16Index> today.
>  
> Zach Waldowski
>  
>  
> On Tue, May 10, 2016, at 06:51 PM, Jordan Rose wrote:
>> By the way, this doesn’t mean it can’t be done, or that we can’t decide on 
>> some kind of partial solution! It just means that it needs to be carefully 
>> considered and explicitly addressed.
>>  
>> Jordan
>>  
>>  
>>> On May 10, 2016, at 15:49, Jordan Rose <jordan_r...@apple.com 
>>> <mailto:jordan_r...@apple.com>> wrote:
>>>  
>>> We thought about that too. The problem is that it’s not always obvious what 
>>> NSString or NSAttributedString the indexes refer to. For example, most of 
>>> the NSRegularExpression APIs produce matches in the form of 
>>> NSTextCheckingResult, which then doesn’t have a reference to the original 
>>> string.
>>>  
>>> Jordan
>>>  
>>>  
>>>> On May 10, 2016, at 13:43, Zach Waldowski via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>  
>>>> Would it be feasible to annotate those and have them appropriately 
>>>> converted to Range<String.UTF16Index> upon crossing the bridge? Thinking 
>>>> in particular of TextKit and friends — it'd away with quite a lot of the 
>>>> pain of, e.g., not having a native struct-y AttributedString.
>>>>  
>>>> Cheers!
>>>>   Zachary Waldowski
>>>>   z...@waldowski.me <mailto:z...@waldowski.me>
>>>>  
>>>>  
>>>> On Tue, May 10, 2016, at 12:37 PM, Jordan Rose via swift-evolution wrote:
>>>>> One particular concern we've had is that many NSRanges aren’t Range<Int>; 
>>>>> they’re Range<String.UTF16Index>. I suppose things wouldn’t get any worse 
>>>>> there, though.
>>>>>  
>>>>> Jordan
>>>>>  
>>>>>  
>>>>>> On May 10, 2016, at 00:14, David Hart via swift-evolution 
>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>>>  
>>>>>> But it’s reasonably implementable? I guess the answer is yes if you have 
>>>>>> already faced the same bridging concerns with NSArray/Array. I’de really 
>>>>>> like this going forward, but I don’t know how confident I am in writing 
>>>>>> a proposal.
>>>>>>  
>>>>>>> On 10 May 2016, at 08:29, Douglas Gregor <dgre...@apple.com 
>>>>>>> <mailto:dgre...@apple.com>> wrote:
>>>>>>>  
>>>>>>>  
>>>>>>>> On May 9, 2016, at 11:23 PM, David Hart <da...@hartbit.com 
>>>>>>>> <mailto:da...@hartbit.com>> wrote:
>>>>>>>>  
>>>>>>>> Why wouldn't it completely eliminate NSRange?
>>>>>>>  
>>>>>>> Because NSRange has a different representation than Range<Int> 
>>>>>>> (start+length vs. start/end), a pointer-to-NSRange has to come in as 
>>>>>>> Unsafe(Mutable)Pointer<NSRange> rather than 
>>>>>>> Unsafe(Mutable)Pointer<Range<Int>>. It’s the same reason that (e.g.), 
>>>>>>> an NSArray** parameter comes in as UnsafeMutablePointer<NSArray> rather 
>>>>>>> than UnsafeMutablePointer<[AnyObject]>.
>>>>>>>  
>>>>>>>> Are you thinking of NSNotFound? Could we migrate those APIs to return 
>>>>>>>> an Optional Range<Int>?
>>>>>>>  
>>>>>>> If you had annotations on the APIs to say that they use NSNotFound as a 
>>>>>>> sentinel, yes.
>>>>>>>  
>>>>>>> - Doug
>>>>>>>  
>>>>>>>>  
>>>>>>>>> On 10 May 2016, at 05:49, Douglas Gregor <dgre...@apple.com 
>>>>>>>>> <mailto:dgre...@apple.com>> wrote:
>>>>>>>>>  
>>>>>>>>>  
>>>>>>>>>> On May 8, 2016, at 2:10 PM, David Hart via swift-evolution 
>>>>>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>>>>>>>  
>>>>>>>>>> Hello Swift-Evolution,
>>>>>>>>>>  
>>>>>>>>>> I spent some time coding on Linux with Swift 3 (latest developement 
>>>>>>>>>> snapshot) and corelibs-foundation and I’ve hit one major hurdle: 
>>>>>>>>>> passing and converting NSRange and Range around between the 
>>>>>>>>>> different stdlib and Foundation APIs - specifically in regards to 
>>>>>>>>>> String.
>>>>>>>>>>  
>>>>>>>>>> Is there a plan to simplify those pain points by converting all 
>>>>>>>>>> corelibs-foundation APIs to accept/return Range on String instead of 
>>>>>>>>>> NSRange? In that case, can’t we get rid of NSRange completely?
>>>>>>>>>  
>>>>>>>>>  
>>>>>>>>> One idea that had come up before was to bridge NSRange to Range<Int>, 
>>>>>>>>> although it wouldn’t completely eliminate NSRange because the two 
>>>>>>>>> types are not representationally identical.
>>>>>>>>>  
>>>>>>>>> - Doug
>>>>>>>>>  
>>>>>>>>  
>>>>>>>  
>>>>>>  
>>>>>> _______________________________________________
>>>>>> swift-evolution mailing list
>>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>> 
>>>>>  
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>  
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>  

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to