无法赋值:'completionBlock 是一个 'let' 常量
Cannot assign to value: 'completionBlock is a 'let' constant
嘿,自从 a 移至 Swift 3 我得到这个错误,说我的 SCNTransaction
扩展中的 completionBlock 是一个 let 常量,我不确定如何将它更改为 "var" 有帮助吗?
Picture of Error here
代码:
extension SCNTransaction {
class func animateWithDuration(_ duration: CFTimeInterval = 0.25, timingFunction: CAMediaTimingFunction? = nil, completionBlock: (() -> Void)? = nil, animations: () -> Void) {
begin()
animationDuration = duration
completionBlock = completionBlock
animationTimingFunction = timingFunction
animations()
commit()
}
}
我认为这个问题与 class SCNTransaction
的实例变量 completionBlock
与你的 completionBlock
的参数同名有关功能。因此,代码行 completionBlock = completionBlock
被解释为对参数 completionBlock
的赋值,而不是同名实例变量。这是无效的,因为默认情况下函数参数是常量,用 let
声明。您需要做的就是消除您所指的 completionBlock
的歧义:
class func animateWithDuration(... completionBlock: (() -> Void)? = nil, ... ) {
...
self.completionBlock = completionBlock
...
}
嘿,自从 a 移至 Swift 3 我得到这个错误,说我的 SCNTransaction
扩展中的 completionBlock 是一个 let 常量,我不确定如何将它更改为 "var" 有帮助吗?
Picture of Error here
代码:
extension SCNTransaction {
class func animateWithDuration(_ duration: CFTimeInterval = 0.25, timingFunction: CAMediaTimingFunction? = nil, completionBlock: (() -> Void)? = nil, animations: () -> Void) {
begin()
animationDuration = duration
completionBlock = completionBlock
animationTimingFunction = timingFunction
animations()
commit()
}
}
我认为这个问题与 class SCNTransaction
的实例变量 completionBlock
与你的 completionBlock
的参数同名有关功能。因此,代码行 completionBlock = completionBlock
被解释为对参数 completionBlock
的赋值,而不是同名实例变量。这是无效的,因为默认情况下函数参数是常量,用 let
声明。您需要做的就是消除您所指的 completionBlock
的歧义:
class func animateWithDuration(... completionBlock: (() -> Void)? = nil, ... ) {
...
self.completionBlock = completionBlock
...
}