2016-11-13 2 views
0

Эй, с тех пор как я перешел на Swift 3, я получаю эту ошибку, которая говорит, что мое завершение Блока в моем SCNTransaction расширении - это константа let, и я не уверен, как ее изменить «var» любая помощь?Невозможно присвоить значение: 'completeBlock является константой' let '

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() 
    } 
} 
+0

Рассмотрим переименовать обычай 'completionBlock', чтобы избежать присвоения себе. – vadian

+0

ОК, возможно, у вас получилось работать плохо, вернувшись к вам в течение минут, спасибо @vadian – Hunter

+0

ОК спасибо и вам, и ответ ниже by @bigelerow – Hunter

ответ

2

Я думаю, что эта проблема связана с тем, что экземпляр переменной completionBlock из SCNTransaction акций класса совпадает с именем параметра completionBlock вашей функции. В результате строка кода completionBlock = completionBlock интерпретируется как присвоение значения параметру completionBlock, а не переменной экземпляра с тем же именем. Это недопустимо, поскольку по умолчанию параметры функции являются константами, объявленными let. Все, что вам нужно сделать, это удалить двусмысленность из которых completionBlock вы имеете в виду:

class func animateWithDuration(... completionBlock: (() -> Void)? = nil, ...) { 
    ... 
    self.completionBlock = completionBlock 
    ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^