2017-09-14 13 views
1

lyricsForName関数は何も印刷しません。 shortNameFromNameが機能し、2番目の機能に何が問題なのかを確認しました。lyricsForName関数は何も印刷しません

func shortNameFromName(name : String) ->String{ 
    var shortName = "" 

    let lowercaseNmae = name.lowercased() 
    let vowelSet = CharacterSet(charactersIn: "aeiou") 
    if let range = lowercaseNmae.rangeOfCharacter(from: vowelSet, options: String.CompareOptions.caseInsensitive) 
    { 
     shortName = name.substring(from: range.lowerBound) 
    } 

    return shortName 
} 

func lyricsForName(lyricsTemplate : String , fullName : String) ->String{ 
    let bananaFanaTemplate = ["<FULL_NAME>, <FULL_NAME>, Bo B<SHORT_NAME", 
          "Banana Fana Fo F<SHORT_NAME>", 
          "Me My Mo M<SHORT_NAME>", 
          "<FULL_NAME>"].joined(separator: "\n") 
    let shortName = shortNameFromName(name: fullName) 
    let lyrics = lyricsTemplate 
     .replacingOccurrences(of: "<FULL_NAME>", with: fullName) 
     .replacingOccurrences(of: "<SHORT_NAME>", with: shortName) 

    print(lyricsForName(lyricsTemplate:bananaFanaTemplate , fullName: "vishnu")) 

    return lyrics 
} 

第1の機能は完全に機能しますが、第2の機能は正しく動作していないようです。それを機能させるために私は何をすべきですか?

+0

あなたの関数は再帰的であると考えられます(あなたは関数宣言内からlyricsForNameを呼び出しています)?代わりに歌詞を印刷するとどうなりますか? – Sparky

+0

再帰的ではないと思われる – vishnu

+0

私はこの機能を外部に持っていましたが、\ n、歌詞を印刷しようとすると同じ結果しか表示しません – vishnu

答えて

0

私は今私の机の上にいるので、あなたのコードを簡単に見ました。

func shortNameFromName(name : String) ->String{ 
    var shortName = "" 

    let lowercaseNmae = name.lowercased() 
    let vowelSet = CharacterSet(charactersIn: "aeiou") 
    if let range = lowercaseNmae.rangeOfCharacter(from: vowelSet, options: String.CompareOptions.caseInsensitive) { 
      shortName = name.substring(from: range.lowerBound) 
    } 

    return shortName 
} 

func lyricsForName(lyricsTemplate : String , fullName : String) -> String { 

    let shortName = shortNameFromName(name: fullName) 
    let lyrics = lyricsTemplate 
      .replacingOccurrences(of: "<FULL_NAME>", with: fullName) 
      .replacingOccurrences(of: "<SHORT_NAME>", with: shortName) 

    print(lyrics) 

    return lyrics 
} 

let bananaFanaTemplate : String = ["<FULL_NAME>, <FULL_NAME>, Bo B<SHORT_NAME>", 
           "Banana Fana Fo F<SHORT_NAME>", 
           "Me My Mo M<SHORT_NAME>", 
           "<FULL_NAME>"].joined(separator: "\n") 

print(lyricsForName(lyricsTemplate:bananaFanaTemplate , fullName: "vishnu")) 

出力:

ヴィシュヌ、ヴィシュヌ、ボービシュヌ バナナファナFoのFishnu 私のMoのMishnu ヴィシュヌ

私はあなたがいると思う機能するようになりましたこれは、(bananaFanaTemplateのタイプミスを注意してください)関数スコープの問題についてはかなり混乱しています。関数の実装内で定数bananaFanaTemplateを宣言しました。ここで、そのパラメータは関数に渡されます。同様に、あなたは関数本体の中から関数を呼び出しました。関数本体の中から関数を呼び出すのは、再帰関数でなければ一般的ではありません。助けhttps://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html

希望:

は見てみましょう。

関連する問題