“函数返回时使用未解析的标识符”错误

时间:2016-02-16 02:11:30

标签: swift compiler-errors swift-playground

我只是想知道:一般来说,“使用未解析的标识符意味着什么”?我经常得到这个,我有时能够解决它,直到我解决它,但从来没有一致的答案。那是什么告诉我的?

此外,这段代码不断抛出错误,我被困住了!我确信它非常简单,我只是没有看到它!错误发生在“return newImage”行。谢谢你的帮助!

    class ColorBoost {

func turnRed(amount: Int) -> UIImage {
    for y in 0..<myRGBA.height {
        for x in 0..<myRGBA.width {
            let index = y * myRGBA.width + x
            var pixel = myRGBA.pixels[index]
            let redDiff = Int(pixel.red) - avgRed
            if (redDiff > 0)
            {
                pixel.red = UInt8( max(0,min(255,avgRed+redDiff*amount     ) ) )
                myRGBA.pixels[index] = pixel
            }
        }
    }

    let redFilteredImage = myRGBA.toUIImage()

    return redFilteredImage!

}

func turnBlue(amount: Int) -> UIImage {
    for y in 0..<myRGBA.height {
        for x in 0..<myRGBA.width {
            let index = y * myRGBA.width + x
            var pixel = myRGBA.pixels[index]
            let blueDiff = Int(pixel.blue) - avgBlue
            if (blueDiff > 0)
            {
                pixel.blue = UInt8( max(0,min(255,avgBlue+blueDiff*amount ) ) )
                myRGBA.pixels[index] = pixel
            }
        }
    }

    let blueFilteredImage = myRGBA.toUIImage()

    return blueFilteredImage!

    }

func turnGreen(amount: Int) -> UIImage {
    for y in 0..<myRGBA.height {
        for x in 0..<myRGBA.width {
            let index = y * myRGBA.width + x
            var pixel = myRGBA.pixels[index]
            let greenDiff = Int(pixel.green) - avgGreen
            if (greenDiff > 0)
            {
                pixel.green = UInt8(  max(0,min(255,avgGreen+greenDiff*amount ) ) )
                myRGBA.pixels[index] = pixel
            }
        }
    }

    let greenFilteredImage = myRGBA.toUIImage()

    return greenFilteredImage!

}

     }


      class chooseFilter {


func applyFilter(filterSelection: String) -> String {

    var callColor = ColorBoost()

    if (filterSelection == "coldImage")

    {
       var newImage = callColor.turnBlue(255); callColor.turnGreen(255)
    }

    if (filterSelection == "warmImage")

    {
        var newImage = callColor.turnRed(5); callColor.turnGreen(15)
    }

    if (filterSelection == "scaryImage")
    {
       var newImage = callColor.turnRed(-1); callColor.turnBlue(-1);   callColor.turnGreen(-1)
    }

    if (filterSelection == "mutedBlue")
    {
        var newImage = callColor.turnRed(-1); callColor.turnBlue(-1);   callColor.turnGreen(-1)
    }

    if (filterSelection == "green")
    {
        var newImage = callColor.turnGreen(2)
    }

 return newImage

“返回newImage”行给了我这个问题。 (applyFilter函数的最后一行)

}

 }


 var filter = chooseFilter()
 var editedImage = filter.applyFilter("warmImage")

2 个答案:

答案 0 :(得分:1)

未解决的标识符错误简单地表示您使用的是当前作用域中不存在的名称。

特别是,您在这里说return newImage,但您所说的范围内没有变量newImage(因为您在{1}}声明了newImage变量更深的范围,不再存在)。

因此,例如,当你说

if (filterSelection == "coldImage")
{
   var newImage = callColor.turnBlue(255); callColor.turnGreen(255)
}
// no `newImage` here!

...大括号内声明的newImage变量在右大括号后不再存在。

答案 1 :(得分:0)

使用matt的提示,你应该在函数的顶部或类的开头(在第一个大括号之后)创建newImage变量,然后在applyFilter函数中执行以下操作:

    if (filterSelection == "coldImage")
{
   newImage = callColor.turnBlue(255); callColor.turnGreen(255)
}
return newImage

这样变量将在函数末尾知道。