2016-11-15 2 views
1

Kann jemand erklären, warum halb geöffnete und geschlossene Bereiche bei Swift 3 nicht mehr gleich funktionieren?Bereich Operatoren (.. <und ...) auf Swift Strings

Dieser Code funktioniert:

var hello = "hello" 
let start = hello.index(hello.startIndex, offsetBy: 1) 
let end = hello.index(hello.startIndex, offsetBy: 4) 
let range = start..<end // <-- Half Open Range Operator still works 
let ell = hello.substring(with: range) 

Aber dies nicht:

var hello = "hello" 
let start = hello.index(hello.startIndex, offsetBy: 1) 
let end = hello.index(hello.startIndex, offsetBy: 4) 
let range = start...end // <-- Closed Range Operator does NOT work 
let ello = hello.substring(with: range) // ERROR 

Es führt zu einem Fehler wie folgt aus:

Cannot convert value of type 'ClosedRange<String.Index>' (aka 'ClosedRange<String.CharacterView.Index>') to expected argument type 'Range<String.Index>' (aka 'Range<String.CharacterView.Index>') 

Antwort

0
  • Warum let range = start..<end Arbeit?

NSRange ist, was Sie brauchen, wenn Sie verwenden wollen substring(with:) (described here).

Hier the definition von Range:

ein halboffenen Intervall auf einem vergleichbaren Typ, von einem niedrigen gebunden zu, aber nicht einschließlich , eine oberen Grenze.

Sie erstellen Bereich Instanzen mithilfe des halboffenen Bereich Operator (.. <):

Um eine Range zu erstellen.

So brüllen Code ist genau richtig (und seinen Willen Arbeit):

var hello = "hello" 
let start = hello.index(hello.startIndex, offsetBy: 1) 
let end = hello.index(hello.startIndex, offsetBy: 4) 
let range = start..<end // <-- Half Open Range Operator still works 
let ell = hello.substring(with: range) 
  • Warum let range = start...end nicht funktioniert:

Faltenbalgausführung Sie ClosedRange gezwungen, eine Range zu werden:

var hello = "hello" 
let start = hello.index(hello.startIndex, offsetBy: 1) 
let end = hello.index(hello.startIndex, offsetBy: 4) 
let range = start...end // <-- Closed Range Operator does NOT work 
let ello = hello.substring(with: range) // ERROR 
  • Wie konvertiert man ClosedRange in Range?

Converting between half-open and closed ranges

2

zu tun, was Sie versuchen, zu tun, rufen Sie nicht substring(with:). Nur tiefgestellt:

var hello = "hello" 
let start = hello.index(hello.startIndex, offsetBy: 1) 
let end = hello.index(hello.startIndex, offsetBy: 4) 
let ello = hello[start...end] // "ello" 
Verwandte Themen