![](/img/trans.png)
[英]Variable 'isVericated' captured by a closure before being initialized - Swift
[英]Assigning Closure to variable in Swift causes 'variable used before being initialized'
我有一个闭合问题,该闭合是要创建的,然后在图像的2D像素栅格范围内的另一个函数中执行,基本上应该这样调用:filter(i,j)并基于返回值在其论点上。 我认为这段代码应该可以工作,但是它抱怨我创建的闭包变量未初始化。 我想这意味着我没有给它参数,但是我不会在此函数中使用,因为闭包在与图像交互时就知道了数据。 如何设置不关心初始化的闭包?
先感谢您 :)
func processFilter(type:FilterType){
var x = 0
var y = 0
//create cloure
var closure:(i:Int, j:Int)->Int
if(type == FilterType.MyFilter) {
x = 1024
y = 2048
func filter(i:Int, j:Int)->Int {
return i*j*x*y*4096
}
//compiler does not complain here...
closure = filter
}
//other if statements with different closure definitions follow...
//This call throws error: variable used before being initialized
let image = filterImage(closure)
}
在确定编译器已初始化之前,可以使用变量closure
。 您可以根据需要通过两种方式解决此问题:
else
-clause你如果和设置closure
为默认关闭。 closure
定义为var closure: ((i: Int, j: Int) -> Int)?
使closure
可选var closure: ((i: Int, j: Int) -> Int)?
然后可以使用closure?(i, j)
来检查它是否是可选的closure?(i, j)
或者if let filter = closure { filter(i, j)}
。 另外,尝试使用更好的变量名,例如filterClosure
。 closure
并不能说太多。
问题是您将闭包定义为:
var closure:(i:Int, j:Int)->Int
然后, 仅当输入if时 , 才对其进行初始化
如果不是,则不初始化该var,因此编译器警告
可能的解决方案:
func processFilter(type:FilterType){
var x = 0
var y = 0
//create cloure
var filterClosure:((i:Int, j:Int)->Int)?
if(type == FilterType.MyFilter) {
x = 1024
y = 2048
func filter(i:Int, j:Int)->Int {
return i*j*x*y*4096
}
//compiler does not complain here...
filterClosure = filter
}
//other if statements with different closure definitions follow...
if let closure = filterClosure {
let image = filterImage(closure)
}
}
仅当代码进入您的if
块(即,如果type == FilterType.MyFilter
)时,才会初始化您的关闭。 在另一种情况下,它保持未初始化状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.