2016-12-25 9 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)] 
    } 

上記の添え字を文字列拡張のswift 3に変換するのに苦労します。以下は、Xcodeの変換ボタンを押した後です。エラーエラー:文字列拡張をswiftに変換するときに、ソースファイル内のエディタのプレースホルダ3

+0

http://stackoverflow.com/questions/24092884/get-nth-character-of-a-string-in-swift-programming-languageはスウィフト1、2、3 –

答えて

4

 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あなたがする必要があるのは、インデックスの前のcharactersを追加することです。コンパイラはまた、String.CharacterView corresponding to開始##String.CharacterViewを追加するヒントを提供します。メッセージは多少曖昧ですが、大きな価値があります!それは文字の配列を期待していることを伝えます。しかし、@vadianが示唆するように、最初からcharactersを省略することもできます。

私はちょっとしたテストも書いてあります。

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

の文字列添字方法を有します両方の行で 'characters'を省略することもできます。 – vadian

+0

@vadianありがとう、私の答えを編集しました。 – dirtydanee

+0

@dirtydaneeあなたは絶対伝説! –

関連する問題