2016-05-02 7 views
2

私が学んだことから、Swiftの文字列は整数値では索引付けできないことを理解しています。しかし、私はインデックスの種類が何か、またはそこにあるのが不思議です。タップキーによってSwift Stringのインデックスタイプはありますか?

let greeting = "Hello! Tom" 
let index = greeting.startIndex 

とXcodeは、インデックスの種類がインデックス(以下に添付の図を参照してください)であると推測され、インデックス値をクリックしてください:私はXcodeのpalygroundに次のコードを書きました。私は

let index: Index = greeting.startIndex 

に二行目を変更したときしかし、私はXcodeの

error: use of undeclared type 'Index' 
error: could not infer type for 'index' 

から2回のエラー警告を持って、Xcodeのは、それがインデックスタイプはインデックスある推論と言っていたじゃないです私が明示的にその型を宣言したとき、なぜエラーが出るのですか?誰かが私にそれを説明することはできますか?

Xcode type infer

答えて

2

文字列型のためIndexがあります:

extension String { 
    public typealias Index = String.CharacterView.Index 
    /// The position of the first `Character` in `self.characters` if 
    /// `self` is non-empty; identical to `endIndex` otherwise. 
    public var startIndex: Index { get } 
    /// The "past the end" position in `self.characters`. 
    /// 
    /// `endIndex` is not a valid argument to `subscript`, and is always 
    /// reachable from `startIndex` by zero or more applications of 
    /// `successor()`. 
    public var endIndex: Index { get } 
    /// Access the `Character` at `position`. 
    /// 
    /// - Requires: `position` is a valid position in `self.characters` 
    /// and `position != endIndex`. 
    public subscript (i: Index) -> Character { get } 
} 

Indexを宣言すると、現在のコンテキストで曖昧です。明示的に文字列の拡張で定義されたtypealiasを参照するためにString.Indexを使用します。

let index: String.Index = greeting.startIndex // 0 

あなたが本当に夢中にしたい場合は、トップレベルのスコープで別のtypealiasを作成することができます。私

public typealias Index = String.Index 
let index: Index = greeting.startIndex // 0 

わかりませんしかし、これをお勧めします。

+1

お返事ありがとうございます。それは私がString.Indexに変更すると動作します – SLN

+0

はい私はcrezy行って、あなたのcrezyの先端も働いている ")おかげで男。 – SLN

関連する問題