2016-12-25 57 views
5
subscript (r: Range<Int>) -> String { 
     let start = startIndex.advancedBy(r.startIndex) 
     let end = start.advancedBy(r.endIndex - r.startIndex) 
     return self[Range(start: start, end: end)] 
    } 

String uzantısı dönüştürürken Aşağıda Xcode üzerinde dönüştürme düğmesine basıldığında sonra neler olduğunu. HatanınHata: kaynak dosyada Editör tutucu, hızlı 3'e benim dize uzantısında yukarıda simge dönüştürmek için çabalayan hızlı 3

 subscript (r: Range<Int>) -> String { 
      let start = characters.index(startIndex, offsetBy: r.lowerBound) 
      let end = <#T##String.CharacterView corresponding to `start`##String.CharacterView#>.index(start, offsetBy: r.upperBound - r.lowerBound) 
      return self[(start ..< end)] 
     } 

Screenshot

+0

http://stackoverflow.com/questions/24092884/get-nth-character-of-a-string-in-swift-programming-language Swift, 1, 2, 3. –

cevap

4

yapmanız gereken tek şey endeksi önünde characters eklemektir. Complier ayrıca String.CharacterView corresponding to başlangıç ​​##String.CharacterView'u eklemek için bir ipucu verir. Mesaj belki biraz bulanık, ama büyük bir değer içeriyor! Söyler ki, bu bir dizi karakter bekliyor. Ancak, @vadian'ın önerdiği gibi, characters'u en baştan bile atlayabilirsiniz.

Sadece emin olmak için biraz test yazdım.

import Foundation 

extension String { 
    subscript (r: Range<Int>) -> String { 
     let start = index(startIndex, offsetBy: r.lowerBound) 
     let end = index(start, offsetBy: r.upperBound - r.lowerBound) 
     return self[start..<end] 
    } 
} 

let string = "Hello world" 
let range = Range(uncheckedBounds: (lower: 0, upper: 2)) 
let s = string[range] // prints "He" 
+0

dize Altsimgeleme yöntemleri vardır Her iki hatta 'karakterler' bile atlayabilirsiniz. – vadian

+0

@vadian teşekkürler, cevabımı düzenledim. – dirtydanee

+0

@dirtydanson mutlak bir efsane! –