2014-08-28 3 views
0

Мне интересно, как преобразовать нижеследующее ниже в Swift. Я попытался это, но застрял на концепции:Преобразование enumerateObjectsUsingBlock to Fast Enemuration - Swift

Я зацикливание через все мои объекты с моим атрибутом UICollectionViewLayoutAttributes

[newVisibleItems enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes *attribute, NSUInteger idx, BOOL *stop) { 
    UIAttachmentBehavior *spring = [[UIAttachmentBehavior alloc] initWithItem:attribute attachedToAnchor:attribute.center]; 
    spring.length = 0; 
    spring.frequency = 1.5; 
    spring.damping = 0.6; 

    [_animator addBehavior:spring]; 
    [_visibleIndexPaths addObject:attribute.indexPath]; 
}]; 

Swift: Переменная отмеченные * получает ошибку:

for (index, attribute) in enumerate(newVisibleIems) { 
    var spring:UIAttachmentBehavior = UIAttachmentBehavior(item: ***attribute***, attachedToAnchor: attribute.center) 

    spring.length = 0 
    spring.frequency = 1.5 
    spring.damping = 0.6 

    self.animator.addBehavior(spring) 
    self.visibleIndexPaths.addObject(attribute.indexPath) 
} 

*** Тип 'AnyObject' не соответствует протоколу 'UIDynamicItem'

Я предполагаю, что это потому, что я не сказал атрибуту атрибут, то есть UICollectionViewLayoutAttributes. Но я не знаю, как это написать?

По существу, как преобразовать Objective C в Swift?

ответ

1

До тех пор, пока newVisibleItems объявлен как [AnyObject], ваш код не будет скомпилирован из-за строгой проверки Swift.

Чтобы newVisibleItems массив ожидаемых типов, вы должны обернуть for петлю внутри потупив:

if let newVisibleItems = newVisibleItems as? [UIDynamicItem] { 
    for (index, attribute) in enumerate(newVisibleItems) { 
     ... 
    } 
} 

Если причина этой ошибки лежит внутри UIKit, будьте уверены, что Apple, является прилагает все усилия, прямо сейчас, чтобы гарантировать, что каждая отдельная декларация в «swiftified» версии своих рамок возвращает соответствующий тип, вместо комбинации AnyObject! с.