ios - instaFilter 处理器错误 - 预期返回的函数中缺少返回
<p><p>我目前正在学习 swift,并且正在为此上课。我们被告知要编写代码以将滤镜应用于示例图片,以在其参数中更改图像上颜色的给定强度,然后返回修改后的图像。</p>
<p>在我编写的代码中,在最后几行,它指出了一个错误,说 </p>
<blockquote>
<p>missing return in a function expected to return 'UIImage'</p>
</blockquote>
<p>我的类(class)代码:</p>
<pre><code>import UIKit
let image = UIImage(named: "sample")!
class brightnessFilter {
func increaseContrast(image: UIImage) -> UIImage{
var rgbaImage = RGBAImage(image: image)!
let avgRed = 118
let avgGreen = 98
let avgBlue = 83
for y in 0..<rgbaImage.height {
for x in 0..<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) -> UIImage{
var rgbaImage = RGBAImage(image: image)!
let avgRed = 118
for y in 0..<rgbaImage.height {
for x in 0..<rgbaImage.width {
let index = y * rgbaImage.width + x
var pixel = rgbaImage.pixels
let redDiff = Int(pixel.red) - avgRed
if (redDiff > 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 & 0xFF)
}
set {
value = UInt32(newValue) | (value & 0xFFFFFF00)
}
}
public var green: UInt8 {
get {
return UInt8((value >> 8) & 0xFF)
}
set {
value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF)
}
}
public var blue: UInt8 {
get {
return UInt8((value >> 16) & 0xFF)
}
set {
value = (UInt32(newValue) << 16) | (value & 0xFF00FFFF)
}
}
public var alpha: UInt8 {
get {
return UInt8((value >> 24) & 0xFF)
}
set {
value = (UInt32(newValue) << 24) | (value & 0x00FFFFFF)
}
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>当一个方法声明写有返回值时,你必须确保它总是返回一个值。</p>
<p>我相信你的错误在于以下方法:</p>
<pre><code>func increaseContrast(image: UIImage) -> UIImage {
var rgbaImage = RGBAImage(image: image)!
let avgRed = 118
let newImage2 = UIImage() //<-- Added
for y in 0..<rgbaImage.height {
for x in 0..<rgbaImage.width {
let index = y * rgbaImage.width + x
var pixel = rgbaImage.pixels
let redDiff = Int(pixel.red) - avgRed
if (redDiff > 0) {
pixel.red = UInt8( max(0, min(255, avgRed + redDiff * 5)))
rgbaImage.pixels = pixel
}
}
let newImage2 = rgbaImage.toUIImage()!
return (newImage2) //<---NOTICE
}// <---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]