2015-03-18 2 views
0

есть ли быстрый гуру, который знал бы, как преобразовать этот код в объектив-с в Свифт?Swift Guru, способный преобразовать этот объектив-c в Swift?

SCNAnimationEventBlock chainEventBlock = ^(CAAnimation *animation, id animatedObject, BOOL playingBackward) { 
     [self.mainSkeleton addAnimation:secondAnim forKey:secondKey]; 
    }; 

    if (firstAnim.animationEvents == nil || firstAnim.animationEvents.count == 0) { 
     firstAnim.animationEvents = @[[SCNAnimationEvent animationEventWithKeyTime:fadeTime block:chainEventBlock]]; 
    } else { 
     NSMutableArray *pastEvents = [NSMutableArray arrayWithArray:firstAnim.animationEvents]; 
     [pastEvents addObject:[SCNAnimationEvent animationEventWithKeyTime:fadeTime block:chainEventBlock]]; 
     firstAnim.animationEvents = pastEvents; 
    } 

В Swift, я попробовал:

var chainEventBlock : ((CAAnimation , AnyObject , Bool) -> (SCNAnimationEventBlock))? 
    chainEventBlock = { (animation, animatedObject, playingBackward)->(SCNAnimationEventBlock) in 
     return self.mainSkeleton?.addAnimation(anim2, forKey: secondKey) 
    } 
if anim1?.animationEvents == nil || anim1?.animationEvents.count == 0 { 
     anim1?.animationEvents = [SCNAnimationEvent(keyTime: fadeTime, block: chainEventBlock)] 
    } 

Ошибка:

enter image description here

Благодаря

ответ

1

Вы объявили возвращаемый тип блока, как SCNAnimationEventBlock но вам не возвращай это.

Либо верните объект такого типа (не обязательно!), Либо ничего не верните и измените объявление chainEventBlock.

let chainEventBlock: SCNAnimationEventBlock = { animation, animatedObject, playingBackwards in 
    self.mainSkeleton?.addAnimation(anim2, forKey: secondKey) 
    return 
} 

if anim1?.animationEvents == nil || anim1?.animationEvents.count == 0 { 
    anim1?.animationEvents = [SCNAnimationEvent(keyTime: fadeTime, block: chainEventBlock)] 
} 
+0

Отлично, спасибо Rengers – Paul

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