菜鸟教程小白 发表于 2022-12-11 16:57:43

ios - instaFilter 处理器错误 - 预期返回的函数中缺少返回


                                            <p><p>我目前正在学习 swift,并且正在为此上课。我们被告知要编写代码以将滤镜应用于示例图片,以在其参数中更改图像上颜色的给定强度,然后返回修改后的图像。</p>

<p>在我编写的代码中,在最后几行,它指出了一个错误,说 </p>

<blockquote>
<p>missing return in a function expected to return &#39;UIImage&#39;</p>
</blockquote>

<p>我的类(class)代码:</p>

<pre><code>import UIKit


let image = UIImage(named: &#34;sample&#34;)!

class brightnessFilter {

func increaseContrast(image: UIImage) -&gt; UIImage{
    var rgbaImage = RGBAImage(image: image)!

    let avgRed = 118
    let avgGreen = 98
    let avgBlue = 83

    for y in 0..&lt;rgbaImage.height {
      for x in 0..&lt;rgbaImage.width {
            let index = y * rgbaImage.width + x
            var pixel = rgbaImage.pixels
            let redLum = Int(pixel.red) - avgRed
            let greenLum = Int(pixel.green) - avgGreen
            let blueLum = Int(pixel.blue) - avgBlue
            pixel.red = UInt8(max(min(255, avgRed + 2 * redLum), 0))
            pixel.blue = UInt8(max(min(255, avgBlue + 2 * blueLum), 0))
            pixel.green = UInt8(max(min(255, avgGreen + 2 * greenLum), 0))
            rgbaImage.pixels = pixel

      }
    }
    let newImage1 = rgbaImage.toUIImage()!
    return (newImage1)
}

}

let test = brightnessFilter()
let processedImg = test.increaseContrast(image)


class redFilter {


func increaseContrast(image: UIImage) -&gt; UIImage{
    var rgbaImage = RGBAImage(image: image)!

    let avgRed = 118

    for y in 0..&lt;rgbaImage.height {
      for x in 0..&lt;rgbaImage.width {
            let index = y * rgbaImage.width + x
            var pixel = rgbaImage.pixels
            let redDiff = Int(pixel.red) - avgRed
            if (redDiff &gt; 0) {
                pixel.red = UInt8( max(0, min(255, avgRed + redDiff * 5)))
                rgbaImage.pixels = pixel
            }
      }
      let newImage2 = rgbaImage.toUIImage()!
      return (newImage2)
    }
}
}

let test2 = redFilter()
</code></pre>

<p>RGBA 类:</p>

<pre><code>import UIKit

public struct Pixel {
public var value: UInt32

public var red: UInt8 {
    get {
      return UInt8(value &amp; 0xFF)
    }
    set {
      value = UInt32(newValue) | (value &amp; 0xFFFFFF00)
    }
}

public var green: UInt8 {
    get {
      return UInt8((value &gt;&gt; 8) &amp; 0xFF)
    }
    set {
      value = (UInt32(newValue) &lt;&lt; 8) | (value &amp; 0xFFFF00FF)
    }
}

public var blue: UInt8 {
    get {
      return UInt8((value &gt;&gt; 16) &amp; 0xFF)
    }
    set {
      value = (UInt32(newValue) &lt;&lt; 16) | (value &amp; 0xFF00FFFF)
    }
}

public var alpha: UInt8 {
    get {
      return UInt8((value &gt;&gt; 24) &amp; 0xFF)
    }
    set {
      value = (UInt32(newValue) &lt;&lt; 24) | (value &amp; 0x00FFFFFF)
    }
}
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>当一个方法声明写有返回值时,你必须确保它总是返回一个值。</p>

<p>我相信你的错误在于以下方法:</p>

<pre><code>func increaseContrast(image: UIImage) -&gt; UIImage {
    var rgbaImage = RGBAImage(image: image)!

    let avgRed = 118
    let newImage2 = UIImage() //&lt;-- Added         

    for y in 0..&lt;rgbaImage.height {
      for x in 0..&lt;rgbaImage.width {
            let index = y * rgbaImage.width + x
            var pixel = rgbaImage.pixels
            let redDiff = Int(pixel.red) - avgRed
            if (redDiff &gt; 0) {
                pixel.red = UInt8( max(0, min(255, avgRed + redDiff * 5)))
                rgbaImage.pixels = pixel
            }
      }
      let newImage2 = rgbaImage.toUIImage()!
      return (newImage2) //&lt;---NOTICE
    }// &lt;---FIX
}
</code></pre>

<p><strong>注意</strong>:<code>return</code> 语句在 <code>for</code> 循环中,这意味着该方法可能并不总是返回值。</p>

<p><strong>修复</strong>:将return语句放在代码中标注的大括号下。</p>

<p><strong>添加</strong>:您必须返回一个值,因此,您必须创建一个</p>

<p>旁注:确保处理 <code>nil</code> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - instaFilter 处理器错误 - 预期返回的函数中缺少返回,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38320653/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38320653/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - instaFilter 处理器错误 - 预期返回的函数中缺少返回