Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Xcode的简单Swift函数_Swift_String_Xcode_Function - Fatal编程技术网

带Xcode的简单Swift函数

带Xcode的简单Swift函数,swift,string,xcode,function,Swift,String,Xcode,Function,我试图编写一个简单的函数,但遇到了一些问题。函数的目的是提取一个字符串,如果字符串不是以辅音开头,则删除每个元音,直到到达第一个辅音为止。例如,如果给定字符串为“eat”,则函数将返回“t”。如果给定的字符串是“awesome”,它将返回“wesome” 下面是我的代码,它编译没有错误,但我无法获得所需的输出。现在它只输出一个空字符串。非常感谢您的建议,谢谢。位置下方的两行无效 let firstCharacter = lyricalworld[lyricalworld.startIndex

我试图编写一个简单的函数,但遇到了一些问题。函数的目的是提取一个字符串,如果字符串不是以辅音开头,则删除每个元音,直到到达第一个辅音为止。例如,如果给定字符串为“eat”,则函数将返回“t”。如果给定的字符串是“awesome”,它将返回“wesome”
下面是我的代码,它编译没有错误,但我无法获得所需的输出。现在它只输出一个空字符串。非常感谢您的建议,谢谢。

位置下方的两行无效

  let firstCharacter = lyricalworld[lyricalworld.startIndex]
  let str = String(firstCharacter)
请把它放在门里面

 for _ in lyricalworld {
      let firstCharacter = lyricalworld[lyricalworld.startIndex]
      let str = String(firstCharacter)
      if vowelArray.contains(str){
        lyricalworld.remove(at: lyricalworld.startIndex)
      }
  }
完整来源

func removeFirstLetter(word: String) -> String{
   var lyricalworld = word
   let vowelArray = ["a", "e", "i", "o", "u", "y"]
   for _ in lyricalworld {
      let firstCharacter = lyricalworld[lyricalworld.startIndex]
      let str = String(firstCharacter)
      if vowelArray.contains(str){
        lyricalworld.remove(at: lyricalworld.startIndex)
      }
  }
 return lyricalworld
} 

这将是正确而有效的解决方案:

func removeFirstLetter(word: String) -> String {
    var lyricalWord = word
    let vowelArray = ["a", "e", "i", "o", "u", "y"]
    for _ in lyricalWord {
        // We are moving these to the loop so every time we get updated first character
        var firstCharacter = lyricalWord[lyricalWord.startIndex]
        var str = String(firstCharacter)

        if vowelArray.contains(str) {
            lyricalWord.remove(at: lyricalWord.startIndex)
        } else {
            // If this time the first character is consonant that means our string is ready and we can return it and finish the loop
            return lyricalWord
        }
    }

    return lyricalWord
}

print(removeFirstLetter(word: "aeiouty"))
但它甚至可以改进

func removeFirstLetter(word: String) -> String{
   var lyricalworld = word
   let vowelArray = ["a", "e", "i", "o", "u", "y"]
   for _ in lyricalworld {
      let firstCharacter = lyricalworld[lyricalworld.startIndex]
      let str = String(firstCharacter)
      if vowelArray.contains(str){
        lyricalworld.remove(at: lyricalworld.startIndex)
      }
  }
 return lyricalworld
} 
在循环中,您每次都要遍历整个元音数组。但是,您有一个很好的结构,名为Set,其工作原理类似于。 简单地说,虽然函数“contains():”调用数组6次以将字母与每个元音进行比较,但使用Set的相同实现只进行1次调用(不总是,但大多数情况下)!当你有更多的数据可供比较时,这是特别有利可图的

因此,下面是使用设置的实现:

func removeFirstLetter(word: String) -> String {
    var lyricalWord = word
    let vowelArray: Set<String> = ["a", "e", "i", "o", "u", "y"] // The only change is here!
    for _ in lyricalWord {
        var firstCharacter = lyricalWord[lyricalWord.startIndex]
        var str = String(firstCharacter)

        if vowelArray.contains(str) {
            lyricalWord.remove(at: lyricalWord.startIndex)
        } else {
            return lyricalWord
        }
    }

    return lyricalWord
}

print(removeFirstLetter(word: "aeiouty"))
func removeFirstLetter(单词:String)->String{
var lyricalWord=word
让元音数组:Set=[“a”、“e”、“i”、“o”、“u”、“y”]//唯一的变化就在这里!
歌词中的uuu{
var firstCharacter=lyricalWord[lyricalWord.startIndex]
var str=字符串(第一个字符)
如果元音数组包含(str){
删除(位于:lyricalWord.startIndex)
}否则{
返回歌词
}
}
返回歌词
}
打印(删除第一个字母(单词:“aeiouty”))

请将您的代码作为文本包含在问题中。文本更容易阅读,也可以搜索和引用。这是一段效率很低的代码。
for
循环对字符串中的每个原始字母迭代一次,即使字符串不是以元音开头。