2017-02-19 1 views
1

文字の次のアルファベットを取得するための特定のAPIはありますか?文字の次のアルファベットを取得する

例:私はアルファベットのコレクションを反復処理し、順番に次の文字を返す必要が推測何もありません場合は

"S""Somestring".characters.first結果は、その後、 "T"

を返す必要がある場合。それとも他に良い解決策がありますか?

+0

おそらく、あなたは我々が_ _「文字列は正確に一つのUnicodeスカラから構築されているかどうかを確認」ロジックを取り込むことができるようにしても、文字のASCII値 –

答えて

2

あなたは「Z」...ラテン大文字「A」を考えた場合、以下の が動作するはずです:

func nextLetter(_ letter: String) -> String? { 

    // Check if string is build from exactly one Unicode scalar: 
    guard let uniCode = UnicodeScalar(letter) else { 
     return nil 
    } 
    switch uniCode { 
    case "A" ..< "Z": 
     return String(UnicodeScalar(uniCode.value + 1)!) 
    default: 
     return nil 
    } 
} 

1、 とnilがある場合、それは次のラテン大文字を返します。さもないと。ラテン文字の大文字の には、連続するUnicodeのスカラ値があるために機能します。 (UnicodeScalar(uniCode.value + 1)!は、 の範囲で失敗しないことに注意してください)guardステートメントは、複数文字の 文字列と拡張グラフェンクラスター(フラグ ""など)の両方を処理します。

小文字が同様にカバーされるべき場合は、

case "A" ..< "Z", "a" ..< "z": 

を使用することができます。

例:

nextLetter("B") // C 
nextLetter("Z") // nil 
nextLetter("€") // nil 
+0

注によって次の反復を取得する必要があります'' String''イニシャライザによるfuse ['UnicodeScalar'](https://developer.apple.com/reference/swift/unicodescalar/2430716-init)への1回の呼び出しで、単一の次の文字 'String'を条件付きで返す(パターンマッチングのための)三項評価。例えば、上の本文を減らすことにはまったく正当な理由はありません: 'Return UnicodeScalar(letter).flatMap {" A "<" "Z"〜= $ 0?文字列(UnicodeScalar($ 0.value + 1)!):なし) ' – dfri

+0

...' UnicodeScalar'イニシャライザ[一見まったく同じ仕事をします](https://github.com/apple/swift/blob/master/上記の明示的に実行されているように私たちのために(stdlib/public/core/UnicodeScalar.swift#L285)(内部的な名前としてなぜ 'description'を使用するのか不思議です。 – dfri

+1

@dfri:優秀な提案! (ただし、わかりやすくするためにスイッチ/ケースを残しておきます:) –

2
func nextChar(str:String) { 
    if let firstChar = str.unicodeScalars.first { 
     let nextUnicode = firstChar.value + 1 
     if let var4 = UnicodeScalar(nextUnicode) { 
      var nextString = "" 
      nextString.append(Character(UnicodeScalar(var4))) 
      print(nextString) 
     } 
    } 
} 
nextChar(str: "A") // B 
nextChar(str: "ζ") // η 
nextChar(str: "z") // { 
+0

私は両方の回答を受け入れることはできませんが、質問にラテン文字のみを受け入れるように指定していなかったので、回答を返答します。乾杯。 – John

関連する問題