swift - lyricsForName 函数不打印任何内容

标签 swift

lyricsForName 函数不打印任何内容。 shortNameFromName 确实有效,我已经检查了第二个函数有什么问题。

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
}

第一个功能完美运行,但我猜第二个功能无法正常运行。我应该怎么做才能让它发挥作用?

最佳答案

我现在在办公 table 旁,所以快速浏览了您的代码。这现在有效(注意 bananaFanaTemplate 中的拼写错误):

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"))

输出:

毗湿奴,毗湿奴,博比什努 香蕉法纳佛 Fishnu 我我的莫米什努 毗湿奴

我认为您对函数作用域问题很困惑。您在函数的实现中声明了常量 bananaFanaTemplate,该参数应该已传递给函数。同样,您从函数体内调用函数,通常不会这样做,除非它应该是递归函数。

看看:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html

希望对您有所帮助。

关于swift - lyricsForName 函数不打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46225015/

相关文章:

ios - 如何调用与特定 UITextField 相关的函数?

ios - Swift iOS 内存使用量在运行时增加

iOS Swift 4 - 在 tableview didSelectRowAt 上显示 Toast(或事件指示器)

swift - 如何比较所选行的答案并从 firebase 中检索答案?

ios - 场景套件渲染器访问错误导致崩溃

swift - 将 NumberFormatter.Style.spellOut 转换为 Int

objective-c - CMake编译swift项目

ios - 如果 UIButton 的大小是一定大小,如何更改它的大小

ios - 当应用程序被终止(非事件)时,点击 Firebase 通知不起作用

ios - 如何摆脱 UIWebView 上的状态栏背景?